July 18, 2019
In this post, a browser on an Ubuntu client PC sends its traffic to a ShadowsocksR (SSR) proxy on a virtual private server (VPS).
You can obtain the materials you need to follow along with this tutorial from the official sources on Github:
shadowsocksr-android-3.5.4.apk
You can alternatively try a mirror:
shadowsocksr-android-3.5.4.apk
In either case, the sha256 checksums should be as follows:
d2b443e11b3dbffebf52b76f27598bc3b830bb5339f26b911baa75c1ce53aee7 shadowsocksr-android-3.5.4.apk
b9551c2a0a25b77218a6340cf1077fc0715b7d8841fd0334157923f62225519f manyuser.zip
6f3a6cfd099d37492b1ac6ea3d504acc6d4c2948c9cc99de59d7488ef18bf6b1 ShadowsocksR-win-4.9.0.zip
These instructions are for a virtual private server (VPS) running Ubuntu Linux 18.04.
SSH into your server. For example, if your server has public IP address <IP_ADDRESS>
:
ssh<EMAIL_ADDRESS>Update existing packages:
sudo apt update
sudo apt upgrade
Install on your server the prerequisite packages for ShadowsocksR:
sudo apt install wget zip unzip python-m2crypto libsodium23
We are going to install ShadowsocksR into our /usr/local
directory, so change into that directory:
cd /usr/local
Get the source either from Github:
sudo wget https://github.com/shadowsocksrr/shadowsocksr/archive/manyuser.zip
Or from a mirror:
sudo wget https://s3.tok.ap.cloud-object-storage.appdomain.cloud/xzdl/manyuser.zip
Check the integrity of the downloaded zip file with the sha256sum
command:
sha256sum manyuser.zip
The SHA256 checksum should match the value stated at the beginning of this post.
Unzip the download:
sudo unzip manyuser.zip
Rename the extracted directory:
sudo mv shadowsocksr-manyuser shadowsocksr
Change into the extracted directory:
cd shadowsocksr
Create the initial ShadowsocksR configuration file:
sudo bash initcfg.sh
The IP address for ShadowsocksR to listen on is the internal IP address of the interface. You can find it with the command:
ip a
Edit the ShadowsocksR configuration file:
sudo vi user-config.json
Specify your values for the ShadowsocksR port, password, encryption method, protocol, obfuscation method, and so on.
Here is an example file. Press the i key on your computer keyboard to enter insert mode.
{
"server": "<IP_ADDRESS>",
"server_ipv6": "::",
"server_port": 80,
"local_address": "<IP_ADDRESS>",
"local_port": 1080,
"password": "86tufeE96hJJrdjr",
"method": "none",
"protocol": "auth_chain_a",
"protocol_param": "",
"obfs": "http_post",
"obfs_param": "",
"speed_limit_per_con": 0,
"speed_limit_per_user": 0,
"additional_ports" : {},
"additional_ports_only" : false,
"timeout": 120,
"udp_timeout": 60,
"dns_ipv6": false,
"connect_verbose_info": 0,
"redirect": "*:80#<IP_ADDRESS>:8080",
"fast_open": false
}
Press Esc on your computer keyboard to escape from insert mode. Type :wq
and press Enter to write the file to disk and quit the editor.
Notice the redirect
to localhost port 8080 in case of a bad password. In a moment, we will set up a web server to listen on localhost port 8080.
Now create the systemd service file for SSR:
sudo vi /etc/systemd/system/shadowsocksr.service
Press the i key to enter insert mode. Insert contents as follows:
[Unit]
Description=ShadowsocksR server
After=network.target
Wants=network.target
[Service]
Type=forking
PIDFile=/var/run/shadowsocksr.pid
ExecStart=/usr/bin/python /usr/local/shadowsocksr/shadowsocks/server.py --pid-file /var/run/shadowsocksr.pid -c /usr/local/shadowsocksr/user-config.json -d start
ExecStop=/usr/bin/python /usr/local/shadowsocksr/shadowsocks/server.py --pid-file /var/run/shadowsocksr.pid -c /usr/local/shadowsocksr/user-config.json -d stop
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target
Press Esc to get out of insert mode, then type :wq
and press Enter to write the file out and quit the editor.
Make SSR start on reboot, and also start it now:
sudo systemctl enable shadowsocksr
sudo systemctl start shadowsocksr
Check that ShadowsocksR is active (running) and listening as expected:
sudo systemctl status shadowsocksr
sudo ss -tulpn | grep 80
If there are any problems, you can look in the logs:
sudo journalctl -u shadowsocksr
sudo tail /var/log/shadowsocksr.log
Now we will install the cover website. This will make the server look like a simple web server to any casual visitors to your external IP address.
sudo apt install apache2
Apache HTTP server will fail to start because ShadowsocksR is already listening on port 80. Before we deal with that, we will add some pages to the website.
cd ~
wget https://github.com/arcdetri/sample-blog/archive/master.zip
unzip master.zip
sudo cp -rf sample-blog-master/html/* /var/www/html/
Now configure the web server listen only on localhost port 8080.
sudo vi /etc/apache2/ports.conf
Restrict the listen line:
Listen <IP_ADDRESS>:8080
Press Esc if you were in insert mode, then type :wq
and press Enter to write the file out and quit the editor.
Make the corresponding change in the default virtual host:
sudo vi /etc/apache2/sites-available/000-default.conf
Change the first line:
<VirtualHost <IP_ADDRESS>:8080>
Press Esc if you were in insert mode, then type :wq
and press Enter to write the file out and quit the editor.
Restart the web server with these changes applied:
sudo systemctl restart apache2
At this stage, you can check your cover website. We will use a public IP address of <IP_ADDRESS>
as an example. Open a browser, and visit http://<IP_ADDRESS>
. You should see your cover website.
Exit your SSH session with the server:
exit
Now we work on the host PC, which is also running Ubuntu 18.04. Update existing packages:
sudo apt update
sudo apt upgrade
Install on your local Ubuntu host the prerequisite packages for the SSR Python client:
sudo apt install wget zip unzip python-m2crypto libsodium23
We are going to install ShadowsocksR into our Downloads
directory, so change into that directory:
cd ~/Downloads
Get the source either from Github:
wget https://github.com/shadowsocksrr/shadowsocksr/archive/manyuser.zip
Or from a mirror:
wget https://s3.tok.ap.cloud-object-storage.appdomain.cloud/xzdl/manyuser.zip
Check the integrity of the downloaded zip file with the sha256sum
command:
sha256sum manyuser.zip
The SHA256 checksum should match the value stated earlier in this post.
Unzip the download:
unzip manyuser.zip
Rename the extracted directory:
mv shadowsocksr-manyuser shadowsocksr
Edit your initial ShadowsocksR configuration file.
sudo vi /etc/shadowsocks.json
You can start with the template below. Of course, you must substitute in your values for the ShadowsocksR server IP address, port, password, encryption method, protocol, obfuscation method, and so on. In this template, the public IP address of the server is given as <IP_ADDRESS>
as an example.
Press the i key on your keyboard to get into insert mode.
{
"server":"<IP_ADDRESS>",
"server_ipv6":"::",
"server_port":80,
"local_address":"<IP_ADDRESS>",
"local_port":1080,
"password":"86tufeE96hJJrdjr",
"timeout":300,
"udp_timeout":60,
"method":"none",
"protocol":"auth_chain_a",
"protocol_param":"",
"obfs":"http_post",
"obfs_param":"",
"fast_open":false,
"workers":1
}
When you have finished editing, write the file to disk and quit the editor.
Change into the directory for the single-user version of SSR:
cd shadowsocksr/shadowsocks
Start the ShadowsocksR client running as a daemon:
sudo python local.py -c /etc/shadowsocks.json -d start
Check that it is running okay:
sudo tail /var/log/shadowsocksr.log
Open Firefox. Configure Firefox to send traffic to localhost port 1080.
<IP_ADDRESS>
1080
Now visit https://whatismyipaddress.com. You should see the IP address of your SSR server.


Lucy can only escape each floor after collecting the FLOOR KEY.
Collecting all the DIAMONDS is optional but will give you more points!
Have you noticed that Lucy ignores lines that start with the #
symbol?
# moveForward(1) --> IGNORED!
moveForward(1) # --> Now she moves
Try it out now!
Execute the code once and then remove the #
from the lines!


--- layout: post title: Getting started with Nexenta Development - Part 1 date: 2008-08-18 14:25:31.000000000 +05:30 categories: - Nexenta - Opensolaris - tech - ubuntu tags: - debian - Nexenta - Opensolaris - ubuntu status: publish type: post published: true meta: _edit_last: '1' author: login: admin email<EMAIL_ADDRESS>display_name: admin first_name: '' last_name: '' ---
So I've been working on Nexenta for a fortnight now, and have picked up a lot of things. Below is a short introduction/guide on how you can join the project.
Introduction
First a little bit of background. The debian project was started in the early nineties to be a one-stop package repository for Linux applications. It has been a fairly popular distribution. However, it was the Ubuntu distribution that made the most use of these packages. Ubuntu is a debian derivative, with focus on the desktop. It makes use of the debian's packages, on top of the linux kernel.
The solaris kernel is very well regarded for its rock solid stability. When solaris was open sourced as opensolaris in 2005, many possibilities emerged.. what if we could combine Solaris's famed stability with Ubuntu's famed user experience. And this is the aim of the Nexenta project.
So that is the backstory. Nexenta = Ubuntu - Linux kernel + Solaris kernel. Nexenta is currently focusing on the Nexenta Core Platform, which is a starting point for any type of focussed distribution; ncp will allow for easy addition of packages, and you are free to develop any distribution on top of it, by adding any packages you want. Which brings us to how you contribute to the Nexenta project: Packages.
Ubuntu/Debian currently have 20000 packages. We need help from the community to port these to Nexenta. A sizable portion has already been done. And a sizable portion remains.
Getting Started
To get started.. these are the documentation a newbie would have to to pursue:
Nexenta uses the Debian/Ubuntu packaging model. This is thoroughly explained in
A majority of the open source applications use the GNU autotools to compile and build programs. This autotools tutorial should help you get started.
Platform
Locally: As NCP is a command-line only environment, the ideal setup for developing would be running NCP VMWare server on Ubuntu Hardy 8.04. NCP 2.0, the upcoming release is based off this Ubuntu release. You can however install this on baremetal or on Windows/ OpenSolaris.
Remotely: Another option is to use the build machines at gnusolaris.org remotely. get onto IRC, and request for a login details. We'll setup a development zone, and give you the login details. Further details on the hackathon page in the "How to get started" section
Machine requirements
Installing Nexenta Core Platform
A step by step guide with screenshots is available at http://www.nexenta.org/os/Getting_Started
If you run into issues setting up VMware with bridged networking, you can take a look at my previous entry.
Getting help
The nexenta project has a very helpful community, that answers your queries quickly.
[The next part will take a look at the important commands used in porting packages]


This study consists of 60 Bobcats in Kiawah Island that have been captured and fitted with GPS collars. The Kiawah Conservation started this study in 2007 and is ongoing to the present day. Bobcats are a true inidication of a good Ecosystem. This Conservation study builds on land preservation of Kiawah Island and helps preserve the habitats of Bobcats. Research studies of conservation and preservation are good stewardship for a healthy environment for everyone. Should you wish to participate in this program, please Sign In.


Config
The `mlproj` command itself can be configured in various ways. It looks in a few different config files, so you can maintain some pieces of configuration where it makes more sense (at the global level, in a specific project, or even in a specific environment).
The first section below describes that general mechanism and the different files involved. The subsequent sections document soecific pieces of configuration. All sections on this page are:
This page is about configuring the `mlproj` command as a whole. There are dedicated pages about "configuring" a specific project or its environments.
Files
There are three different places where a piece of configuration can be saved. At the "global" level (in the user's home directory), at the current project level, or in one of its specific environments.
The most specific file "wins" (first the environment used, then the project, then the global config file):
xproject/mlenvs/{environ}.json
xproject/mlproj.json
~/.mlproj.json
~/mlproj.json
Note that the config fine in the user home directory can have or not a dot
as first character in its name (.mlproj.json
versus mlproj.json
). The one with a dot is the idiomatic name,
whilst the one with no dot is supported for platforms where it is hard to
create a file with such a name.
MLCP
The MarkLogic Content
Pump is a command line tool to load/extrcat content to/from MarkLogic
databases. Its interface, its option names, can sometimes be quite
difficult to remember though. When MLCP is enabled, mlproj
will:
- use it for its own purposes (to deploy modules for instance, which is more efficient using MLCP)
- provide a simpler interface to load content, via the
command
mlproj load
- provide a frontend to MLPC, via the command
mlproj mlcp
, so it automatically uses the connection info from the environment files
To install MLCP:
- download
the latest
binaries (at the time of writing, labelled
Release <IP_ADDRESS> binaries zip package
) - unzip it somwehere (e.g. in
/usr/local/mlcp/
or in~/mlcp/
) - add the following to
~/.mlproj.json
(or in your project or environment files):
{ "mlproj": { "config": { "mlcp": { "home": "/usr/local/mlcp/mlcp-<IP_ADDRESS>/" } } } }
Instead of home
, you can use bin
to point straight
at the MLCP script (the BATCH or Shell script itself).


--- layout: home main_image_path: main_image_caption: show_carousel: false show_blog: false posts_number: 2 carousel: - image: caption: alink: _options: layout: hidden: true image_path: uploads_dir: assets/images/:year width: 1200 height: 1200 resize_style: contain mime_type: image/jpeg main_image_path: uploads_dir: assets/images/:year width: 1200 height: 1200 resize_style: contain mime_type: image/jpeg content: uploads_dir: assets/:year _comments: main_image_path: Cover image main_image_caption: Alt text for cover image carousel: Edit the slideshow show_carouse: Show the slideshow show_blog: Show your latest posts on the homepage posts_number: How many posts to show alink: Optional web link from the slide caption: optional caption ---
Welcome to treatments of Reflexology, Reiki healing and Homeopathy provided by an experienced and registered practitioner of complementary medicine.
Lizzie Austin MAR, DSHom
As a qualified practitioner of Homeopathy for many years, I trained more recently in Reflexology and Reiki, and have been amazed at the results.
I have therefore increased my focus on reflexology both of the feet and the face; also using crystals with reflexology; as well as combining Reiki healing with reflexology treatments.
My website will offer information about how these therapies may help you, your family and your friends achieve greater health, wellbeing and relief from stress.
Not sure if Reflexology or Homeopathy can help you?
Call me for honest, professional advice on 07780 542068
People often seek help from reflexology, homeopathy, reiki or other complementary therapies as a form of prevention, as well as for existing conditions previously diagnosed by their medical practitioner. I will always direct patients to their medical practitioner or GP whenever necessary in order to have tests or discuss options.
Contact Lizzie Austin MAR, DSH for professional advice about reflexology, reiki and homeopathy healing in Oxford.
The WellBeing Clinic
1 Windmill Road, Headington
Oxford OX3 7BL
Tel (Clinic): 01865 751111
Tel: 07780 542068
I have been fortunate enough to experience Lizzie Austin as a Homeopath, a Reflexologist, and a Reiki practitioner. In all three therapies she has been enormously helpful and effective. She is skilled at getting to the very heart of what a patient needs, and has a calming, loving presence that enhances the chosen mode of therapy. I unreservedly recommend her.
Lesley Hayes


How do we use your Google account?
We ask for what appears as three permissions View and manage Google
Drive files that you have opened or created with this app, View your
email, and Know who you are on Google. These permissions let us
create files in your Drive, and update those files later. Also, if in the
future we provide a way for you to directly upload Pyret files and load them
into code.pyret.org
from your Drive, you can explicitly grant
permission for this application to view and edit certain files. We need to
know your identity because this is the only way we've found to reliably give
you persistent access to saving to Drive that doesn't expire and require
popping up new windows while you're editing.
You can always go to https://security.google.com/settings/security/permissions?pli=1
and immediately remove all access that we have to your account. Your programs
and code.pyret.org
folder will not be deleted if you do
so, but you can always manually delete the folder and its contents yourself.
Where are things stored in my Drive?
We initially make a single folder in your Google Drive, called
code.pyret.org
, and store all of your programs there, with the
names you choose for them. They are all created with you as the owner, and
private to your account.
If you share programs, we create a new folder, called
code.pyret.org.shared
, and we make a publicly-readable
copy of any programs you share in that directory. If you delete this
files in this folder, links for those programs you have shared with others
will stop working, but any copies others have made will be theirs to keep.
Each time you share a program, a new copy is created from its current
contents.
We can only see files that we created, so simply moving another file into
your code.pyret.org
collection won’t cause it to show up in our
interface: you need to create the file manually through our editor.
The listing of programs in this application only looks for the
code.pyret.org
folder and its contents, so if you rename or remove
that folder, a new, empty one will be created for you on your next login.


Title
Second
Reload page
Go to first page
Forms
First name:
Last name:
Male
Female
Other
Submit function doesn't implemented yet.
Go to previous page


Puppy Squad
"San Diego's Premiere Dog Meetup Site!"
Login/Sign Up
My Profile
Account Settings
Logout
Toggle navigation
Events
Create Event
About/FAQ
×
Login or Sign Up
Email
Password
No Account? Sign Up
Here
!
Back
Full Name
Email
Password
Confirm Password
Business Account
Yes
No
Account made! Enjoy the site.
Create an Event
Image Upload:
Clear
Browse
Event Title:
*
* Required Fields
Date:
*
Time:
*
Breed:
Select Breed
Beagle
Corgi
French Bulldog
Great Dane
Dog Size:
Select Dog Size
Small
Medium
Large
Location:
*
Price: $
*
Event Description:
*
Publish Event


This is my first web page!
Isn't it nice?
Here are some things I'm going to learn about coding:
Here is a link to my favorite things
Check out Epicodus. It's a great school for learning web programming!


How to grow your business around an audience
A guide to collaborating with other staff users to publish, and some resources to help you with the next steps of growing your business
As you grow, you'll probably want to start inviting team members and collaborators to your site.
Ghost has a number of different user roles for your team:
Contributors
This is the base user level in Ghost. Contributors can create and edit their own draft posts, but they
are unable to edit drafts of others or publish posts. Contributors are untrusted users with the most
basic access to your publication.
Authors
Authors are the 2nd user level in Ghost. Authors can write, edit and publish their own posts. Authors
are trusted users. If you don't trust users to be allowed to publish their own posts, they should be set
as Contributors.
Editors
Editors are the 3rd user level in Ghost. Editors can do everything that an Author can do, but they can
also edit and publish the posts of others - as well as their own. Editors can also invite new
Contributors & Authors to the site.
The Owne
The top user level in Ghost is Administrator. Again, administrators can do everything that Authors and
Editors can do, but they can also edit all site settings and data, not just content. Additionally,
administrators have full access to invite, manage or remove any other user of the site.
Administrators
There is only ever one owner of a Ghost site. The owner is a special user which has all the same
permissions as an Administrator, but with two exceptions: The Owner can never be deleted. And in some
circumstances the owner will have access to additional special settings if applicable. For example:
billing details, if using Ghost(Pro).
Ask all of your users to fill out their user profiles, including bio and social links. These will populate rich structured data for posts and generally create more opportunities for themes to fully populate their design.
If you're looking for insights, tips and reference materials to expand your content business, here's 5 top resources to get you started:
- .How to create a premium newsletter (+ some case studies)
Learn how others run successful paid email newsletter products - The ultimate guide to membership websites for creators
Tips to help you build, launch and grow your new membership business - The Newsletter Guide
A 201 guide for taking your newsletters to the next level - The proven way to find your niche, explained
Find the overlap and find a monetizable niche that gets noticed - Should you launch a referral program?
Strategies for building a sustainable referral growth machine


Another construction of the dodecagon, from a line segment.
Start with two points on a line. Make a perpendicular line.
Get the 4 intersecting points; use them as centers.
Get the intersections of the original circle with the new ones: dodecahedron.
Please look at the source code of this page for more information.


But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it?
To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it.
To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it.
To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it.


First name is required.
Last name is required.
Username is required.
Password is required.
Selecting a role is required.


{{ if .RSSlink }} {{ end }}
I'm co-founder and tech lead at CoachUp, a venture-backed startup in Boston. My passion is building stuff that people love to use. I have expertise in Ruby on Rails, React, and Postgres, and an interest in Elixir and Rust. I have a double major in Math and Econ from MIT. I've passed FINRA Series 7, 63, 86, and 87 from a former life in finance.


So, I decided today that I needed a blog. So here it is, me blogging about programming in general, .NET and my everyday experiences.
Why does the world need another blog; you might ask ? Well, it is an experiment for now. I will try to provide some interesting content - and at the same time it will be a place for me to document various findings and thoughts. Anyways, it is much better than the old "Web 0.1" static content website that I used to have on this domain ;-)
I encourage everyone to use the comments for questions and/or suggestions.
Don't know who I am ?
Well, you don't really need to, in order to read my posts. My name is Dennis Riis and I am a danish software developer / architect, currently working with web technologies. If you want to read more about me, you can always head over to the About me page.


Real deal open source WebGL performance data
WTF is this
The WebGL API does expose some information about your GPU. Unfortunately, not only is this info sometimes inaccurate, but it don’t really give you an idea of the performance you can expect a device to have.
We fix that.
Benchmark.GL stress tests GPUs and stores the results. The more people who hit the benchmark, the more accurate the data will be. Contribute to the project by benchmarking your device!
We then take that data, normalize it, and dump it into an NPM package. You use it to calibrate your WebGL apps to match the capabilities of your users' devices.
Contribute
We need you to make Benchmark.GL work! The more data we have, the more accurate it will be.
Hit the benchmark with every device you have. Hit it multiple times. Tell your friends. Tell that one cousin you have that nobody likes much you know the one.
Hit the benchmark Tweet it Faceboook it


Please login to view the contents of the page.
I'm sure you've seen this symbol on many of your favorite websites and apps. It keeps moving the smaller circle in a circular motion until something is loaded or we exit. This is a prime example of looping! Looping allows us to do a certain task over and over and over (until we decide to stop it or it reaches a certain condition). We can also track what happens between each loop iteration!
For example, let's track Stephen Curry's three-point attempts. Everytime Stephen Curry shoots from behind the three-point line and scores, he earns three points to his point total. Stephen Curry currently has six points. He takes five three-point shots and makes four of them. How many total points does Stephen Curry currently have?
Eighteen is correct! Stephen Curry started with six points and made five three-pointers. By looping through each shot attempt he made, the point total ends up being eighteen points!
Your answer is incorrect. Try again.
In Computer Science, the two most common types of looping statements are while
loops and for loops.
While loops keep running a certain action while a certain condition
is or is not met.
For loops keep running a certain action for a certain duration,
while internally keeping count of how many times it has ran with an iterator (or counter) variable.
Both of these looping statements are great to use, so it depends on
your preference as to which one you want to use.
Check out this looping statement below written in JavaScript!
The number variable is created to store the value of an integer.
This function uses a for loop. A for loop has three required items within its parenthesis: a counter variable, a conditional statement, and an incrementer/decrementer. The i=0; creates the counter variable for the loop. The i<3; is the conditional statement. If i is less than three, than it will run the for loop, or else it moves to line 6. The i++; is the incrementer for the loop. Once the for loop runs through each line within itself, it keeps incrementing the i counter and runs lines 3-4 until the conditional statement is false.
The number++; line adds one to the total of the variable number.
The console.writeln("Current Number: " + number); line is a print statement. What this means is that the page will display whatever is inside of the parenthesis. Since number is an integer variable, the page will print the value of the variable at its certain point. So in this case, the page will print, Current Number: the value of number.
The curly bracket encloses the for loop.
Once the for loop has ran three times, it exits the loop then displays the final number with the "console.writeln("Final Number: " + number);" statement.
This was just a basic loop, as looping can become very complex and confusing! Getting the basics of looping down early will help you when it comes to looping through complex problems!


Miscellaneous
Here are a number of web development tools that I've found useful, but they don't really fit anywhere else.
Here are a number of web development tools that I've found useful, but they don't really fit anywhere else.
Markdown is a lightweight formatting language for formatting. Markdown is incredibly useful for writing documentation, Github readmes and even static websites. It is also frequently used on forums, including Reddit. Here's a website with all of your formatting needs. It comes complete with code and examples.
Sometimes it's hard to predict if your Markdown looks right. Sometimes your text editor doesn't have a live preview option. If so, this tool will let you see how your Markdown looks.
Lorem Ipsum is a valuable tool for typography and testing layouts. Lorem Ipsum generates random text in latin that you can use to help layout or plan your website or any other work requiring text.
Balsamiq is a rapid wireframing tool that enables you to create mock ups for websites, mobile apps and software. Available for a 30 day free trial, Balsamiq does cost a hefty $89.00
Sketch is a tool for designing your web and mobile apps, from the initial plans to the final assets. It enables you to get ready to build the real thing.
RegEx is one of the most confusing aspects of programming. Regexr is a tool that helps alleviate some of that pain, providing a cheatsheet for RegEx symbols and a live editor that allows you to see what exactly your RegEx is targeting.


Militiaman Leirynn:
What are you still doing here? You must take this report to
Alex before it is too late
. He's waiting for the news. You know, something about that Map really bothers me...


Machine Learning at ITB (ML@ITB) is a student-run organization based at Institut Teknologi Bandung (ITB) with a mission to build a vigorous machine learning community on campus. We aim to do so by providing educations, projects, and seminars in the machine learning field to provide students interested in machine learning to learn and get dirty with hands-on experience by building challenging and interesting projects.
ML@ITB is inspired by other machine learning communities, such as ML@B and Stanford ML Group that collectively have nurtured thousands of machine learning enthusiasts. We hope that we could do similar feats in providing home for many future practicioners in the machine learning field.
P.S. We are independent from Institut Teknologi Bandung (ITB). We take full credit for our organization.


Travis McGaha
he/him/his
I am a Lecturer in the Computer and Information Sciences department at the University of Pennsylvania. I teach undergraduate and graduate courses :)
I am currently teaching CIS 3800 for Fall 2023.
I am a Lecturer in the Computer and Information Sciences department at the University of Pennsylvania. I teach undergraduate and graduate courses :)
I am currently teaching CIS 3800 for Fall 2023.
A course in C that covers sytem calls, processes, interrupts, memory, threads, and virtualization.
Last Taught: Fall 2023
A C/C++ course that covers sytem calls, file I/O, threading, and networks.
Last Taught: Spring 2023
A CS1 course in Java. Topics include strings, arrays, loops, testing, simple OOP, and lists.
Last Taught: Spring 2023
w/ Harry Smith
A bottom-up course going from transistors to assembly. Ends with an introduction to C.
Last Taught: Fall 2022
C & C++ programming with topics on system calls, threading, and networking.
TA'd 5 times
Instructor Summer 2020
Co-instructor w/ Justin Hsia Spring 2021
Covers theory and design details of distributed systems. Students implement a primary/backup system then move on to implement multi-paxos and a sharded server.
Last Taught: Winter 2021
Introduction to programming. Course uses Python to solve real-world interdisciplinary tasks.
Last Taught: Fall 2020
Introduces basic programming fundamentals and discusses how Computer Science affects average people.
Last Taught: Winter 2019
Data structures & algorithms for non CSE majors. Covers standard algorithms, dynamic programming, algortihmic analysis, and other topics.
Last Taught: Summer 2018
Examines key computational abstraction levels below modern high-level languages. Includes data representation, caching & memory, assembly, and other related topics.
Last Taught: Spring 2018
Core introductory programming course. Explores classes and data structres like maps, linked lists, stacks, and queues. Course utilizes Java.
Last Taught: Winter 2018
Please feel free to meet with me! I am a busy person, but I am happy to meet with students whenever I am free.
My office is Levine 269 A, and I am happy to have students visit whenever my door is open.
If you would like to schedule a specific time to meet, please
click here to schedule a 1-on-1 Meeting
Just a few things to note:
The following is a collection of links to articles, confrence talks and video essays related to my job that I think are neat :).
None of these are made by me, I just want to put these in a convenient space where others may be able to find them.
Feel free to send me something if you think I would like it :)
Note: I do not necessarily agree with these all 100%, but I do think they are interesting and worth reading/listening
optional<T>
and raw pointers.I do have a life outside of UPenn, faculty are people too!
I like to spend my time with:
I love listening to and occasionally playing music on the guitar. I listen to most genres, but lately I've been listening to a lot of Kankyo Ongaku and The Microphones in 2020
I typically stick to role-playing & story-driven games or logic games. Favourites include: Fallout: New Vegas, Satisfactory, Deep Rock Galactic, and The Witness
Getting well structured stories/information in either auditory or visual form is pretty nice. Lately I've been reading novels by Haruki Murakami.
It is really nice to just be able to walk around the city, see/try new things, and just not be stuck in the house. Philly doesn't have as nice of a landscape as the pacific NW, but it is nice walking around.


{% extends "web/_layout.html" %} {% block body %}
This is a NuGet compatible package index.
To use this server, with NuGet, run the following command:
nuget.exe list -Source $source nuget.exe delete -ApiKey $key -Source $source $pkg $vers nuget.exe push -ApiKey $key -Source $source $file
This server is running version {{ server_version }} of PyNuGet.
The complete list of packages can be found here.
{% if files %}


Topography¶
There are three aspects to specifying the geometry in GeoClaw: (a) Bathymetry of the ocean floor and topography of the coastal area (b) Location and size of the fault of interest for tsunami simulation (c) Displacement of the fault.
Bathymetry¶
We will start by considering the specification of the bathymetric/topographic data. The bathymetry is assumed as a value of \(z\) (relative to a particular reference level) at each point \((x,y)\). Most often the water surface is considered as \(z=0\) for reference. In addition, GeoClaw recognizes only uniformly spaced rectangular bathymetry grids.
It should also be noted here that GeoClaw allows for multiple files to be input for the bathymetry. A bilinear interpolation is used to stitch the files to obtain the domain for the simulation. In regions of intersections, the best available information is used. This is further used to obtain a single top value related to the cell and used in the computations for solving the shallow water equations.
There are four formats supported by GeoClaw and SimCenter presently supports three of these formats as inputs to the Hydro-UQ tool. These formats are discussed below:
Topo type 01¶
The first format, known as topotype = 1
stores the \((x,y,z)\) points of all the points in the domain. The \((x,y)\) represent the latitude and longitude while the \(z\) represents the depth at the particular location. The size and spacing of the grid is thus obtained from the data directly. Each row, progressing from upper left corner (NW) and moving eastward. The next subsequent lines move southward. The files, generally, have the below format:
x1 y1 z1
x2 y2 z2
...
xn yn zn
The points are ordered as illustrated in the above figure. The points start from the North-west part of the domain and progress east across the rows and later down.
Topo type 02¶
The second format, known as topotype = 2
is slightly more compact and stores only the \((z)\) value of all the points in the domain. It uses the fact that GeoClaw requires a regular and rectangular grid. The data related to the \((x,y)\) points (i.e. latitude and longitude) are derived from this header information given in the first six lines. The header information includes
value mx
value my
value xlower / xllcenter / xllcorner
value ylower / yllcenter / yllcorner
value cellsize
value nodataval
z1
z2
...
Here mx
and my
represent the number of points in the x- and y- directions; cellsize represent the size of the cell. All cells in the grid are of the same size and specified by either one value or by two values, i.e. dx and dy both. If there is a point \((x,y)\) on the grid, where the value of depth is not known, then the value specified using the value given as nodataval
.
However, there are two aspects that can lead to ambiguity in reading the files, namely
The order of value and label can be in any order. Either it can be value followed by label or otherwise.
The third and fourth lines can either represent the value of the lower left corner, i.e.
xlower
andylower
or value of the lower left corner of the SW-most cell, i.e.xllcorner
andyllcorner
. Alternatively, it can also specify the center of this SW-most cell and represented by the labelsxllcenter
andyllcenter
The points are ordered as illustrated in the above figure and is similar as that defined for the topo type 01
but here only the \((z)\) values are stored in the file. The points start from the North-west part of the domain and progress east across the rows and later down. The file has a total of mx*my
number of lines in the file.
An example file will be as shown below
2 mx
2 my
0 xlower
-10 ylower
10 cellsize
9999 nodataval
-100
-200
-400
-250
Topo type 03¶
The third format, known as topotype = 3
is same as the ESRI ASCII Raster format .
The first six lines with the header for type 03 is same as for type 02. This is followed by my lines. Each of these lines contain mx values of \(z_i\) . This implies that the first line is the north-most line going from west to east and the last line is the south-most line going from west to east. The topo example file from type 2 can be written for type 03 and is given as below:
2 mx
2 my
0 xlower
-10 ylower
10 cellsize
9999 nodataval
-100 -200
-400 -250
Download topo files¶
Alternatively, there are several online databases that are available to download topography files for tsunami modeling. Some of these are given on the Clawpack website. This is achieved by downloading the file into the scratch folder using the maketopo.py
file as
from clawpack.geoclaw import topotools
topo_fname = 'Name-of-topo.asc'
url = 'http://depts.washington.edu/clawpack/geoclaw/topo/etopo/' + topo_fname
clawpack.clawutil.data.get_remote_file(url, output_dir=scratch_dir,
file_name=topo_fname, verbose=True)
Note¶
In types 2 and 3, the values and labels are interchangeable. However, the order of lines is important.
It is possible to automatically invert the z-values. This can be achieved by specifying the value of
topotype
as -1, -2 or -3.
Fault geometry¶
In order to simulate a scenario, an earthquake source needs to be specified. This is often given in terms of the slip of a fault plane or sub-faults that make up the single plane. This fault geometry is specified using parameters in the maketopo.py
file as given below
usgs_subfault = dtopotools.SubFault()
usgs_subfault.strike = 16.
usgs_subfault.length = 450.e3
usgs_subfault.width = 100.e3
usgs_subfault.depth = 35.e3
usgs_subfault.slip = 15.
usgs_subfault.rake = 104.
usgs_subfault.dip = 14.
usgs_subfault.longitude = -72.668
usgs_subfault.latitude = -35.826
usgs_subfault.coordinate_specification = "top center"
Some of the important parameters for a single sub-fault are as shown in the figure below.
Each of the fault parameters are discussed, in detail, below.
Fault strike¶
The fault strike angle for a single sub-fault is specified using the command subfault_name.strike
and is pitorially depicted in the below figure.
In general, the strike line of a fault is a line representing the intersection of the feature with a horizontal plane. Here, this strike angle represents the slip direction of the fault and is measured clockwise from the north direction as shown in the above figure. This is generally between 0 - 360 degrees.
Fault dip¶
The dip of the sub-fault is specified using the command subfault_name.dip
. This represents the steepest angle of descent of the fault relative to a horizontal plane, and is given by the number (\(0 - 90^o\)) as well as a letter (N,S,E,W) with rough direction in which the bed is dipping downwards.
One commonly used technique is to consider the strike so the dip is \(90^o\) to the right of the strike, in which case the redundant letter following the dip angle is omitted (right hand rule, or RHR). The map symbol is a short line attached and at right angles to the strike symbol pointing in the direction which the planar surface is dipping down. The angle of dip is included without the degree sign as, for example, subfault_name.dip = 14
. This is specified is between 0 - 90 degrees positive.
Fault rake¶
The block below the fault plane is known as the Footwall while the one above is known as the Hangingwall. The rake angle represents the angle between the slip direction of the hangingwall block from the dip vector, as measured in the fault plane. This is specified, for example, as subfault_name.rake = 104
. This is generally between - 180 to 180 degrees.
Fault dimensions and slip¶
The other dimensions of the sub-fault that needs to be specified include the length (subfault_name.length
), width (subfault_name.width
) and depth (subfault_name.depth
) of the fault. This is often specified in meters or kilometers. Another important aspect is the slip of the fault given as subfault_name.slip
and this represents the magnitube of slip along the rake. The slip is often specified in cm or m.
Fault location¶
The sub-fault location is specified in terms of latitude (subfault_name.latitude
) and longitude (subfault_name.longitude
) of a point on the fault plane. The location is also specified by the label subfault.coordinate_specification
and the options include:
bottom center
: (longitude,latitude) and depth specified at bottom centertop center
: (longitude,latitude) and depth specified at top centercentroid
: (longitude,latitude) and depth specified at the centroid of the fault planenoaa sift
: (longitude,latitude) specified at the bottom center while the depth is specified at top, This mixed convention is used by the NOAA SIFT databasetop upstrike corner
: (longitude,latitude) and depth is specified at the corner of fault that is both updip and upstrike.
Combining sub-faults¶
Once the above set of parameters have been specified for each sub-fault, they are combined to form the list that represents the fault of interest. This is achieved as below
fault = dtopotools.Fault()
fault.subfaults = [subfault]
Note¶
It is possible that the rupture is time-dependent (of also known as kinematic). In such a case, the
rupture_time
andrise_time
also need to be specified for each sub-fault.
Fault motion¶
The Okada model is generally used by GeoClaw to specify the fault plane slip into the seafloor deformation. The information is used to create a dtopo
file needed for GeoClaw. The Okada model assumes that the seafloor is flat and the earth is a homogeneous elastic material. Since the fault slip parameters are not often known very accurately even for historical earthquakes, on can assume that this is a reasonable enough model to account for seafloor deformation in tsunami modeling.
The Okada model uses a Poisson ratio of 0.25 and is based on the solution derived over an elastic half-space. For more information on the Okada model, please refer to Y. Okada, “Surface deformation due to shear and tensile faults in a half-space,” Bullein of the Seismological Society of America, vol. 75, pp. 1135 - 1154 (1985).
The slip of a fault plane, i.e. displacement of the topography, is specified through the dtopo
files. These files are presented in two formats.
dtopotype = 1
:The header and file structure is similar to the topo files with
topotype = 1
Each line has four quantities:
t
,x
,y
,dz
This assumes a regular rectangular grid where the displacement
dz
is specified at each timet
and each spatial point(x,y)
The file contains \(mx*my*mt\) lines if \(mt\) different times are specified for an \(mx*my\) grid
dtopotype = 3
:The header and file structure is similar to the topo files with
topotype = 3
The header has lines with
mx
,my
,mt
,xlower
,ylower
,t0
,dx
,dy
anddt
The file should have
mt
sets ofmy
lines with each line containingmx
values ofdz
As in the Chile example on the Clawpack
website, it can also be generated automatically using the maketopo.py
as given below
x = numpy.linspace(-77, -67, 100)
y = numpy.linspace(-40, -30, 100)
times = [1.]
fault.create_dtopography(x,y,times)
dtopo = fault.dtopo
dtopo.write(dtopo_fname, dtopo_type=3)
Generate topo files¶
The bathymetry files can be generated using python-based utilities in the Clawpack
library. In this regard, a python script (maketopo.py
) is used to create the topography and also set the fault parameters.
To start with it is essential to set an environment variable CLAW
pointing to the location of clawpack. Once the variable has been set, the topo
file can be generated using
>> make topo
or alternatively as
>> python maketopo.py


ASAC
Home
About
Contact
Studen Email
Student Mobile Number
Tuition
Submit
ID
Name
Email
Mobile
Age
Tuition
Remove Student
Total:
Clear Table


This is the Amteck frontpage for COINS documentation. Currently items are added manually but will later be added via an internal application.
This How To guide provides instructions for COINS system administrators on the steps required to enter a new opportunity from within COINS. Always test this process in an up to date, non-live environment before attempting it on a LIVE environment. When performing this process on a LIVE environment we recommend that you have a working, complete backup of the LIVE environment.
Books in the COINS documentation behave in a similar way to the menus in the rest of COINS OA, and in fact use the same system. A book can contain documentation topics and other books, in the same way that a COINS menu can contain runnable functions and other menus. If you want to create your own documentation book, you need to add it to the existing documentation menu structure by creating a user-defined copy of one of the documentation books, and adding your new book to this copy.


Make the image as clear as possible. Show the whole curb and show the house in the background so it is easily findable.


BTFS-Video
Community Rules
Privacy Policy
Terms of Service
BTFS VIDEO
Admin
My Profile
Download Video
Upload Video
My Uploads
Delete
SIGN IN TO TRON LINK TO CONTINUE


I would like to remind readers that Hooting Yard has an eerie, shimmering “presence” on both Facecloth and Witter.
The Facecloth group is sunk in lassitude, but it can be revivified if you lot all join up and start posting the sorts of posts persons post on Facecloth, whatsoever they may be.
The Witter site is automatically updated* every time Mr Key posts something here at Hooting Yard, which means I never have to lift a tweety finger, thank heavens. But I understand that following and retweeting things is a constant activity for half the planet these days, so I encourage you all to get cracking.
*NOTA BENE : Due to inexplicable and quite possibly Lovecraftian forces at work in the aether, the updates have not been appearing for several months. This should be fixed soon, possibly by the time you read this.


MAIN Block
All sites have a main menu with the links to the most
visited pages or important system areas. This block will
appear as first one in the left of your site. You can't
delete the Main Block and you just have one block.
This block is usefull to link to the different sections, like
a Web Links, FAQ page, Virtual Store, Top10, Special Sections,
Users Account Page, Topics, Statistics, etc. You can use HTML code
but not PHP code inside the Admin Block.


Basic matrix operators -
Variance and covariance -
Least squared regression model -
Standard error in linear models -
Examples of matrix algebra -
Poisson distribution -
Manual PCA calculation -
Differential gene expression with RNA-seq data -
Normalization and exploratory analysis of RNA-seq data -
RNA-seq alignment -
Introduction to RNA-seq analysis -
Styling with Bootstrap -
Basic CSS notes -
Evenness analysis -
Diversity analysis -


Only valid when bgiframe plugin is installed, this object gets passed as the settings argument into the bgiframe plugin.
CSS Class used when use hovers over the child list item
Array of CSS classes to use on each level from top down
NOTE*: When filled, parentMO & childMO are deprecated
CSS Class used when use hovers over the parent list item
Time in milliseconds of how long the menu will stay open after the mouse loses focus of the menu


a Schematic of the fabrication process of the WLED; b electroluminescent (EL) spectrum of WLED; c color coordinates of WLED device, Mn-doped CsPbCl 3 QDs, and Bi-doped Cs 2SnCl 6。 (the black dot inside the circle is the white color coordinates and the asterisk represents the blue and orange perovskite). The inserts are the photograph of the WLED


Daktari wangu conveniently.
Choose a particular medical specialist depending on your medical needs.
See the doctors available and their schedule by viewing their calendars.
Book an appointment and get the medical contact and location for service.


Terror on the Fly....
We had recently run out of lactone (GBL), as it had recently become a controlled substance. I was, frankly, using too much of it for several months, and had started to suffer withdrawal symptoms--shaking, minor hallucinations, feeling generally anxious, accelerated heart rate. This likely exacerbated the effects.
I suggested to my roommate that we go to the store and get some benadryl, as it had always helped me sleep in the past. This was to be a grand mistake. We got a 48 pack of 25 mg benadryl....I am uncertain of how many I took, although it was at least 12 initially.
After about 90 mins (my time frame is uncertain, but we have largely pieced it together after the fact) I began to have severe hallucinations. I was staring at a wine box (the kind you get from the liquor store that hold 12 bottles of wine) and was convinced that it was full of mice and cockroaches, and that they were somehow creating some sort of synergistic breeding process. I asked my roomie to take the box out to the trash, and he did--I was revolted that he could even pick it up. Shortly after that (30 mins?) I began hearing loud noises that seemed to be emanating from outside our apt. door, and I thought it was the FBI, trying to beat down the door--my roommate, sick of hearing my paranoid blathering, left the door open for about an hour--the entire time I was essentially cowering on the couch in terror.
He re-entered the front room, saw me, and shut the door...at some point during this period, I took more benadryl, and did catch a bit of fitful sleep. He left to get some beer and a bottle of gin, and the entire time he was gone, I basically sat on the couch fearfully, passing in and out of consciousness. When he returned with the alcohol, I drank a fairly considerable amount, and returned to sanity for a time, albeit drunk sanity (I have no idea what caused this). The next morning was Easter; I had 'sobered' up and returned to my delusional state, and I for some reason was watching religious programming and thought that my ashtray was somehow magnetically/spritually driving my cigarette away from it. Then, when I grabbed the ashtray it felt as if it had warped in my hand. Shortly after that, I had the brilliant idea of calling my mother and announcing a religious experience--if she had any inkling of my delusion, I couldn't tell at the time.
Later that day, we went to a friend's apartment, and I wandered outside, evidently convinced that a bunch of my old high school friends were playing 'hide and seek' with me....resulting in me looking in a lot of car windows and such. After failing to find them, I retired to my friend's apartment and sat on the balcony smoking, when I saw the police patrolling the parking lot. I don't know if they were actually there or not, but it wouldn't surprise me if my actions caused them to come out.
That evening, my roommate acquired more alcohol, noting presciently that I seemed relatively sane under its influence--finally, I drank, fell asleep, and became normal enough to take my finals, which happened to be in two days.
The experience convinced me to never touch GHB, GBL, or diphenhydramine again (other than for legitimate allergy purposes, at the suggested dose).
 It is a very unsettling feeling to be completely insane, and hallucinatory, and yet have some small part of my mind telling me that this isn't real. I wouldn't wish it on my worst enemy.
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.


This is the most basic page I could make!
Seriously, this isn't too bad, html is fun!
This will show a popup on the screen, try it out!


Award History
Here are a list of the Oakton Robotics Historic Events since 2017
4/27/2023 Providence Community Center Einstein Night
3/22/2019 Leidos Outreach 3/1/2019 FRC Battlefield Competition 3/1/2019 FRC Battlefield Competition 12/16/2018 FTC Centreville Competition 12/1/2018 FTC Battlefield Competition 1/3/2018 FRC Rumble in the Roads 10/22/2018 Air And Scare 10/22/2018 IROC - FRC 10/17/2018 Lockheed Martin Outreach 4/30/2018 FRC World Championship 4/13/2018 Girls in STEM 4/9/2018 FRC Districts 3/19/2018 FRC Competition 3/5/2018 FRC Battlefield Competition 2/25/2018 FTC Virginia State Championship 2/11/2018 FTC Central Virginia Qualifier