How to Deodorize Clothing
by Susan Stocker ✅Some odors on clothing can be difficult to remove, not to mention embarrassing. By taking advantage of natural odor neutralizers, or experimenting with specialty detergents, you can find the method that works best for you, and maybe even save money in the process.
Explore this Article
Article Summary
■ Deodorizing Naturally
■ Using Specialty Detergents
Related Articles
References
Article Summary
To deodorize clothing, try adding a cup of baking soda to your laundry. You could also add 1/4 cup of white vinegar to your laundry prior to the rinse cycle. If you'd like a spray-on deodorizer instead, combine 1 part vodka with 1 part water in a spray bottle, and spray it on affected areas. Once you've removed the unwanted odor, try freshening up your clothes by applying a solution made up of 1 cup of vinegar, 1 cup of water, and 1/2 of a teaspoon of your favorite essential oil. For tips on how to use specialty detergents to remove odors, keep reading!
Method 1 - Deodorizing Naturally
1. Add baking soda to your laundry to neutralize odors. Baking soda has long been used to deodorize clothing and to pre-treat stains. Adding one cup of baking soda to a load of laundry can help remove unwanted smells.
- Sometimes simply adding baking soda to your wash cycle isn’t enough. For hard-to-remove odors, add ½ cup baking soda per gallon of water in a large bucket or sink. Be sure to swirl the clothes around to ensure they are fully submerged and to distribute the baking soda evenly throughout the mixture.
- If you don’t have time to wash sweaty, smelly clothes immediately, sprinkle some baking soda on them before putting them into your laundry bin to control odors and absorb moisture.
2. Mix white vinegar into the wash cycle. Add about ¼ cup of white vinegar during the final rinse cycle to help remove odors from sweat, smoke, and bacteria.[1]
3. Make a vodka dilution. Use 1 part vodka to 1 part water and store the solution in a jug (don’t worry about long-term storage, your solution will last for a very long time). Next, pour some solution into a spray bottle and spray onto smelly clothes.
- Do a spot-test first in a small, unnoticeable area to make sure this solution won't damage your clothes. This way to deodorize your clothes may not be ideal for certain fabrics, like leather or silk.
- If you don’t have a spray bottle, they can usually be found at restaurant supply stores or anywhere commercial cleaning products are sold.
- Although vodka is an effective deodorizer, it doesn’t clean your clothes or remove stains, so don't expect your solution to produce results in these areas.
4. Make a fabric refresher with essential oils. Use 1 cup of vinegar, 1 cup of water, and ½ teaspoon of your favorite essential oil. Tea tree, lavender, lemon, and grapefruit are all popular options. Pour your mixture into a spray bottle and spritz your clothes between wash cycles. [2]
EXPERT TIP
Susan Stocker
Green Cleaning Expert
Susan Stocker runs and owns Susan’s Green Cleaning, the #1 Green Cleaning Company in Seattle. She is well known in the region for outstanding customer service protocols — winning the 2017 Better Business Torch Award for Ethics & Integrity —and her energetic support of fair wages, employee benefits, and green cleaning practices.
Expert Hack: Use several drops of essential oils like lavender or tea tree to deodorize your clothes. Tea tree has natural germicide and antifungal properties, and lavender has a calming scent.Susan Stocker
Green Cleaning Expert
Method 2 - Using Specialty Detergents
1. Soak your clothes in a Borax solution. Add ½ cup of Borax for every half gallon of water you use and soak your clothes for at least 30 minutes in a large sink or tub.[3] Borax is very effective in removing odors due to certain aspects of its chemical makeup that inhibit the metabolic processes of many odor-causing bacteria.
- Be sure to wash your clothes after using Borax. Another useful property of Borax is that it actually increases the effectiveness of other laundry detergents. After you’re done soaking your clothes, run them through the washing machine as you normally would and allow the unique chemical properties of Borax to work their magic!
2. Use a sport wash. Specialty detergents like Nathan’s Sport Wash or Sport Suds are specifically designed for removing body odor and bacteria from workout clothing, but their deodorizing properties usually do the trick for other unwanted smells. Simply add the recommended amount to your washing machine and wash as normal.[4]
-  It’s recommended to give your washing machine a deep clean before laundering your clothes with detergents like these.
3. Make your own specialty detergent. Homemade specialty detergents can be just as effective as commercial products, if not more. Most recipes for homemade detergents call for a mix of natural and chemical ingredients. One popular recipe calls for 3 tablespoons Borax, 3 tablespoons baking soda, and 2 tablespoons Dawn dishwashing liquid. Add these to 2 cups hot water in a gallon jug and shake until well mixed. Then, add cold water until the jug is full.[5]
- Making your own specialty detergent is also remarkably cost effective. You could reduce your cost per load of laundry from $.50 to $.03!
Tips
- Try air drying your clothes to facilitate off-gassing of fumes and chemicals. Drying naturally can give your clothes a fresh, breezy scent without the expense of dryer sheets.
- Deep clean your washing machine with hot water and bleach to remove any buildup, mold, and bacteria-they could give your clothes an unwanted smell.
Warnings
- Cleaning products like Borax and other specialty detergents are harmful when ingested. Always keep these products out of reach of children.
Things You'll Need
- Baking Soda
- Inexpensive vodka
- Borax
- Spray Bottle
- Specialty laundry detergent
Related wikiHows
References
-
↑ http://www.howtocleanstuff.net/how-to-deodorize-clothes/ -
↑ http://www.organicauthority.com/sanctuary/how-to-remove-odors-from-fabrics-naturally-diy.html -
↑ https://www.20muleteamlaundry.com/uses/cleaning-laundry/how-to-pre-soak-laundry-stains-with-borax -
↑ http://www.health.com/home/workout-clothes-smell -
↑ http://www.everydaycheapskate.com/home-and-family/a-fantastic-new-recipe-for-laundry-detergent/


Jestin bulunduğunuz yere gelmesi için adresinizi giriniz.
Jestinden Nasıl Yararlanırsın?
Tebrikler!
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing.
Lorem Ipsum passages, and more recently with desktop publishing software like.


Hue Light colors
The list of all the hue-light colors that you can choose one of to send to the light
{% for (name,rgb_value) in colors %}
{{ name }}
{% endfor %}


{{ post['title'] | safe }} Posted on {{ post['date'] |formatdate }} by {{ post['author'] }} {{ post['preview']|markdown|safe }} {{ post['body']|markdown|safe }} Please enable JavaScript to view the comments powered by Disqus.


My Name Is Qusai Al-Hanaktah
- I started learning in the engineering collage of civil department at tafila technical university in 2015, now iam i fresh graduated sincs tow months ago.
- I Have traned and worked in public work and housing as civil engineer, and now i am wating for any job at my stdyed.
- keep going and make more improvement and development at the civil enginerring, then be an instructor at any university to teach.
My favorite location to visit
- Istanboul
- Roma
- the moldive Islands
- Paris
- los anglos
- macaa
- almadina almunwara
- aqaba
- Berlin
- moscoo


Michał Szmyd
Users can create posts with different categories
Users can leave comments
To make it more simplify i only take care of number of comments belonged to user per tag
SELECT
users.email,
posts.tag,
COUNT(comments.*) AS user_comments_tag
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
GROUP BY users.id, posts.tag
ORDER BY user_comments_tag DESC
email | tag | user_comments_tag
--------------------------+-------------+-------------------
<EMAIL_ADDRESS>| video | 3
<EMAIL_ADDRESS>| programming | 3
<EMAIL_ADDRESS>| video | 2
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| video | 1
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| video | 1
<EMAIL_ADDRESS>| books | 1
<EMAIL_ADDRESS>| books | 1
SELECT
users.email,
posts.tag,
COUNT(comments.*) AS user_comments_tag
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
GROUP BY GROUPING SETS(users.email, posts.tag), posts.tag
ORDER BY users.email, user_comments_tag DESC, posts.tag NULLS LAST
email | tag | user_comments_tag
--------------------------+-------------+-------------------
<EMAIL_ADDRESS>| books | 1
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| video | 1
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| programming | 3
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| video | 1
<EMAIL_ADDRESS>| video | 2
<EMAIL_ADDRESS>| books | 1
<EMAIL_ADDRESS>| moto | 1
<EMAIL_ADDRESS>| video | 3
<EMAIL_ADDRESS>| moto | 1
| video | 7
| moto | 5
| programming | 3
| books | 2
but… not as i wanted
It will return correct rows and data but it is incredibly slow
SELECT
users.email,
posts.tag,
COUNT(comments.*) AS user_comments_tag,
(SELECT COUNT(comments.*)
FROM comments
INNER JOIN posts p ON comments.post_id = p.id
AND users.id = users.id
AND p.tag = posts.tag) AS total_comments
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
GROUP BY users.id, posts.tag
ORDER BY users.id, user_comments_tag DESC
email | tag | user_comments_tag | total_comments
--------------------------+-------------+-------------------+----------------
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| video | 3 | 7
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| video | 1 | 7
<EMAIL_ADDRESS>| books | 1 | 2
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| programming | 3 | 3
<EMAIL_ADDRESS>| video | 1 | 7
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| video | 2 | 7
<EMAIL_ADDRESS>| books | 1 | 2
<EMAIL_ADDRESS>| moto | 1 | 5
SELECT DISTINCT ON (posts.tag, users.id)
users.email,
posts.tag,
COUNT(comments.*) OVER(PARTITION BY comments.user_id, posts.tag) AS user_comments_tag,
COUNT(comments.*) OVER(PARTITION BY posts.tag) AS total_tag_comments
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
ORDER BY users.id
email | tag | user_comments_tag | total_tag_comments
--------------------------+-------------+-------------------+--------------------
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| video | 3 | 7
<EMAIL_ADDRESS>| books | 1 | 2
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| video | 1 | 7
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| programming | 3 | 3
<EMAIL_ADDRESS>| video | 1 | 7
<EMAIL_ADDRESS>| books | 1 | 2
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| video | 2 | 7
SQL Clauses hierarchy
---------------------
| Record id.1 tag.1 |
| Record id.2 tag.1 |
| Record id.3 tag.2 |
| Record id.4 tag.2 |
| Record id.5 tag.3 |
---------------------
---------------------
| Record id.1 tag.1 |
| Record id.2 tag.1 | records count -> 2
|-------------------|
| Record id.3 tag.2 |
| Record id.4 tag.2 | records count -> 2
|-------------------|
| Record id.5 tag.3 | records count -> 1
---------------------
Order by record id DESC
---------------------
| Record id.2 tag.1 |
| Record id.1 tag.1 |
|-------------------|
| Record id.4 tag.2 |
| Record id.3 tag.2 |
|-------------------|
| Record id.5 tag.3 |
---------------------
---------------------
| Record id.1 tag.1 |
| Record id.2 tag.1 |
| Record id.3 tag.2 |
| Record id.4 tag.2 |
| Record id.5 tag.3 |
---------------------
SELECT DISTINCT ON (posts.tag, users.id, total_tag_comments, user_comments_tag, users.email)
users.email,
posts.tag,
COUNT(comments.*) OVER(PARTITION BY comments.user_id, posts.tag) AS user_comments_tag,
COUNT(comments.*) OVER(PARTITION BY posts.tag) AS total_tag_comments
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
ORDER BY total_tag_comments DESC, user_comments_tag DESC, posts.tag ASC, users.email ASC
email | tag | user_comments_tag | total_tag_comments
--------------------------+-------------+-------------------+--------------------
<EMAIL_ADDRESS>| video | 3 | 7
<EMAIL_ADDRESS>| video | 2 | 7
<EMAIL_ADDRESS>| video | 1 | 7
<EMAIL_ADDRESS>| video | 1 | 7
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| moto | 1 | 5
<EMAIL_ADDRESS>| programming | 3 | 3
<EMAIL_ADDRESS>| books | 1 | 2
<EMAIL_ADDRESS>| books | 1 | 2
SELECT DISTINCT ON (posts.tag, users.id, total_tag_comments, user_comments_tag)
users.email,
posts.tag,
COUNT(comments.*) OVER(by_user_and_post_tag) AS user_comments_tag,
COUNT(comments.*) OVER(by_post_tag) AS total_tag_comments
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
WINDOW
by_post_tag AS (PARTITION BY posts.tag),
by_user_and_post_tag AS (PARTITION BY comments.user_id, posts.tag)
ORDER BY total_tag_comments DESC, user_comments_tag DESC, posts.tag ASC, users.id ASC
Remember that following results come from postgresql db hosted on home-class computer
137 690 comments in database
and display same results in user profile dependent on user_id
SELECT DISTINCT ON (posts.tag, users.id, total_tag_comments, user_comments_tag)
users.email,
posts.tag,
COUNT(comments.*) OVER(PARTITION BY comments.user_id, posts.tag) AS user_comments_tag,
COUNT(comments.*) OVER(PARTITION BY posts.tag) AS total_tag_comments
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
WHERE users.id = 2
ORDER BY total_tag_comments DESC, user_comments_tag DESC, posts.tag ASC, users.id ASC
email | tag | user_comments_tag | total_tag_comments
--------------------------+-------+-------------------+--------------------
<EMAIL_ADDRESS>| video | 3 | 3
<EMAIL_ADDRESS>| moto | 1 | 1
But it’s not what I expected
SELECT * FROM
(
SELECT DISTINCT ON (posts.tag, users.id, total_tag_comments, user_comments_tag)
users.id AS user_id,
users.email,
posts.tag,
COUNT(comments.*) OVER(PARTITION BY comments.user_id, posts.tag) AS user_comments_tag,
COUNT(comments.*) OVER(PARTITION BY posts.tag) AS total_tag_comments
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
ORDER BY total_tag_comments DESC, user_comments_tag DESC, posts.tag ASC, users.id ASC
) t0
WHERE t0.user_id = 2
user_id | email | tag | user_comments_tag | total_tag_comments
--------+---------------------------+-------+-------------------+--------------------
2 |<EMAIL_ADDRESS>| video | 3 | 7
2 |<EMAIL_ADDRESS>| moto | 1 | 5
Remember if you are using SQL View with OVER clause inside selected records, it will collect results before WHERE clause executed on this view
SELECT * FROM top_activity_view WHERE user_id = 1
user_id | email | tag | user_comments_tag | total_tag_comments
--------+---------------------------+-------+-------------------+--------------------
2 |<EMAIL_ADDRESS>| video | 3 | 7
2 |<EMAIL_ADDRESS>| moto | 1 | 5
I’ll change the scenario a little bit
Every user in my database collected some points dependent on their overall activity
Next thing is to show how much points I need to beat user ahead of me, or how much points other user needs to beat me dependent on collected points
SELECT
id,
email,
points,
LAG(points) OVER(ORDER BY points DESC, id ASC) AS prev_user_points,
LEAD(points) OVER(ORDER BY points DESC, id ASC) AS next_user_points
FROM users
ORDER BY users.points DESC, id ASC;
id | email | points | prev_user_points | next_user_points
---+---------------------------+--------+------------------+------------------
5 |<EMAIL_ADDRESS>| 837 | | 734
3 |<EMAIL_ADDRESS>| 734 | 837 | 547
2 |<EMAIL_ADDRESS>| 547 | 734 | 170
4 |<EMAIL_ADDRESS>| 170 | 547 | 104
1 |<EMAIL_ADDRESS>| 104 | 170 |
SELECT
users.id,
email,
points,
(SELECT post_id FROM comments WHERE user_id = users.id ORDER BY created_at DESC LIMIT 1),
(SELECT id AS comment_id FROM comments WHERE user_id = users.id ORDER BY created_at DESC LIMIT 1)
FROM users
ORDER BY users.points DESC, id ASC
id | email | points | post_id | comment_id
---+---------------------------+--------+---------+------------
5 |<EMAIL_ADDRESS>| 837 | 9 | 15
3 |<EMAIL_ADDRESS>| 734 | 9 | 14
2 |<EMAIL_ADDRESS>| 547 | 5 | 8
4 |<EMAIL_ADDRESS>| 170 | 10 | 17
1 |<EMAIL_ADDRESS>| 104 | 9 | 13
SELECT
users.id,
email,
points,
comments.*
FROM users
LEFT JOIN LATERAL (
SELECT
post_id AS post_id,
comments.id AS comment_id
FROM comments
WHERE comments.user_id = users.id
ORDER BY created_at DESC
LIMIT 1
) comments ON true
ORDER BY users.points DESC, id ASC
id | email | points | post_id | comment_id
---+---------------------------+--------+---------+------------
5 |<EMAIL_ADDRESS>| 837 | 9 | 15
3 |<EMAIL_ADDRESS>| 734 | 9 | 14
2 |<EMAIL_ADDRESS>| 547 | 5 | 8
4 |<EMAIL_ADDRESS>| 170 | 10 | 17
1 |<EMAIL_ADDRESS>| 104 | 9 | 13
30 Users
137690 Comments
This is how we can display ‘top users comments section’ with their last comment and post
per tag with LATERAL JOIN
SELECT
t0.user_id,
t0.email,
t0.tag,
t0.user_comments,
t0.tag_comments,
last_comments.comment_id,
last_comments.post_id
FROM
(
SELECT DISTINCT ON (posts.tag, users.id, tag_comments, user_comments)
users.id AS user_id,
users.email,
posts.tag,
COUNT(comments.*) OVER(PARTITION BY comments.user_id, posts.tag) AS user_comments,
COUNT(comments.*) OVER(PARTITION BY posts.tag) AS tag_comments,
array_agg(comments.post_id) OVER(PARTITION BY comments.user_id, posts.tag) AS post_ids
FROM users
INNER JOIN comments ON comments.user_id = users.id
LEFT JOIN posts ON posts.id = comments.post_id
ORDER BY tag_comments DESC, user_comments DESC, posts.tag ASC, users.id ASC
) t0
INNER JOIN LATERAL (
SELECT
post_id,
user_id,
created_at,
id AS comment_id
FROM comments c WHERE t0.user_id = c.user_id AND c.post_id = ANY(t0.post_ids)
ORDER BY c.created_at DESC LIMIT 1
) last_comments ON true
user_id | email | tag | user_comments | tag_comments | comment_id | post_id
--------+---------------------------+-------------+---------------+--------------+------------+---------
2 |<EMAIL_ADDRESS>| video | 3 | 7 | 8 | 5
5 |<EMAIL_ADDRESS>| video | 2 | 7 | 12 | 7
3 |<EMAIL_ADDRESS>| video | 1 | 7 | 5 | 3
4 |<EMAIL_ADDRESS>| video | 1 | 7 | 11 | 7
1 |<EMAIL_ADDRESS>| moto | 1 | 5 | 13 | 9
2 |<EMAIL_ADDRESS>| moto | 1 | 5 | 1 | 1
3 |<EMAIL_ADDRESS>| moto | 1 | 5 | 14 | 9
4 |<EMAIL_ADDRESS>| moto | 1 | 5 | 2 | 1
5 |<EMAIL_ADDRESS>| moto | 1 | 5 | 15 | 9
4 |<EMAIL_ADDRESS>| programming | 3 | 3 | 17 | 10
3 |<EMAIL_ADDRESS>| books | 1 | 2 | 9 | 6
5 |<EMAIL_ADDRESS>| books | 1 | 2 | 10 | 6
Only for one tag
Any questions?


lcd_dog_m_spi
control for DOG-M (ST7036 based) LCD's
|
Author
|
Richard Zengerink, Copyright © 2008, all rights reserved
|
|
Adapted-by
|
|
|
Compiler
|
=2.4
|
Description
Simple interface for DOG-M (st7036) alphanumeric LCD screens.
Screens can range from 1x8 (1 lines, 8 chars), 2x16 and 3x16.
Uses spi interface SI (data line), CLK (clock) RS (register select) and
if necesery CSB (chip select) (total 4 PIC pins max.).
Expects: - 1 pin for data: 'lcd_data'
- 1 pin for clock: 'lcd_clk'
- 1 pin for register/data select: 'lcd_rs'
- 1 pin for Chip Select 'lcd_csb' (if necesery, or CSB to gnd on lcd)
- 1 var bit named not_connected to assign to lcd_csb if this pin
is connected to ground.
Directions for use of this library in application programs
(in this sequence):
1. Declare the following constants:
const byte LCD_ROWS = 2 -- 1, 2 or 3 lines
const byte LCD_CHARS = 16 -- 8, or 16 chars per line
and variables (aliases):
var bit not_connected
var bit lcd_data is pin_A0 -- 1 data pin
var bit lcd_clk is pin_A1 -- 1 data pin
var bit lcd_rs is pin_A2 -- 1 data pin
var bit lcd_csb is pin_A3 -- 1 data pin
or if csb is connected to gnd:
var bit lcd_csb is not_connected
2. Include this library.
and somewhere before actually using the lcd:
3. Set the chosen LCD data and control pins to output:
portA_low_direction = all_output (in above case this is OK)
OR assign each pin seperatly (when not every pin is on the same port):
pin_A0_direction = output (each pin separately assigned)
pin_A1_direction = output
pin_b0_direction = output
pin_b1_direction = output
4. Call lcd_init() to initialize the lcd controller.
Above is an example for a 2x16 LCD:
Available functions for application programs:
_lcd_write() ends byte from value to
register of the lcd and
shift cursor position 1 right
_lcd_write_data() write data to lcd using
_lcd_write() lcd_rs high
_lcd_write_data() write command to lcd using
_lcd_write() lcd_rs low
lcd_init() initialize the LCD controller
Dependencies
Private
Private
No sample found


Thanksgiving recipe swap
We asked 12 food bloggers to rethink the traditional Thanksgiving meal – and they each swapped an established dish in favor of something from their own cultural background. Mix and match from the recipes below to bring something new to your table this year or contribute your own idea
here
- Contact Life & Style editor
lifeandstyle@
theguardian.com - Report errors or inaccuracies<EMAIL_ADDRESS>- Letters for publication should be sent to<EMAIL_ADDRESS>- If you need help using the site<EMAIL_ADDRESS>- Call the main Guardian and Observer switchboard:
+44 (0)20 3353 2000


{{name}}
Do you want to Exit ?
NAME OF ACTIVITY : {{page}}
TYPE :
DATE/DURATION :
PHOTO OF ACTIVITY :
ADVISOR :
A DESCRIPTION THE ACTIVITY :
FLIES OR DOCUMENTS RELEVANT TO THE ACTIVITY :


Toggle navigation
ABOUT US
PRODUCTS
SERVICES
CONTACT US
Firstname
Lastname
Phone No.
Mobile No.
Email
Street No.
City
State
Postal code
Username
Password
Confirm Password
Register


{% extends "base.html" %} {% block title %}Server Error{% endblock %} {% block content %}
Don't worry, the team has been alerted. Sorry for the inconvenience. {# If the problem persists, please contact us us via [TK] #}


The Animation Loop
Scrawl-canvas runs a single, centralized requestAnimationFrame (RAF) function - animationLoop - for all animation objects.
Animation objects are Scrawl-canvas objects with a fn attribute; the function will be invoked once per RAF cycle.
The RAF function is first invoked as part of Scrawl-canvas initialization when it loads into a web page, and continues to run while the doAnimation flag remains true.
To stop the RAF:
scrawl.stopCoreAnimationLoop()
To restart the RAF after it has been stopped:
scrawl.startCoreAnimationLoop()
… Functionality tested in Demo DOM-009
As part of initialization, two animation objects are created and added to the animate array:
- coreTickersAnimation (order: 0) - which will invoke all ticker animations currently subscribed to it - factory/ticker.js
- coreListenersTracker (order: 0) - which channels window-based events (mouse/touch movement, viewport resize, scrolling) to Scrawl-canvas objects that need to take action in response (thus choking such actions to a maximum 60-per-second) - core/userInteraction.js
Additional animations can be created via a number of ‘make’ functions:
These objects can be added to the animate Array by invoking their run function, and removed by invoking their halt function.
The order in which animations objects run during each RAF cycle (= Display cycle) can be (partly) determined by the objects’ order attribute: those with a lower order value will be invoked before those with a higher value.
Note that ticker/tween animations will all run before other animations (order differences between tickers/tween objects will be respected).


Abair Leat is the world’s first minority language mobile messaging app. Equipped with all of the functions you’ve come to expect in a mobile messaging app, plus an innovative new predictive text function and an exciting rewards system, Abair Leat makes minority language communication easier and more enjoyable than ever before!
Abair Leat is currently under development as an Irish language application, but we hope that it will inspire minority language applications all over the world. For that reason, we’re happy to share our design and development processes with you. Let us take you behind the scenes of Abair Leat.
We worked hard to make Abair Leat beautiful and functional for you. Watch our video below to learn more about the project and how it is affecting the language in Ireland!
The Abair Leat Team
Coláiste Lurgan – Project Management for the initial developmental phase
Elon University – School of Communication – Design / Promotion / Branding
ADAPT Centre, Dublin City University – Irish predictive text and language usage assessment components
SuperPixels – Mobile & Web Agency – Building main platform framework
Interested in getting involved with Abair Leat, or learning more about how you can integrate Abair Leat’s functionality into your own minority language application?
Contact Abair Leat’s director:
Mícheál Ó Foighil
clurgan@yahoo.ie


About Me
I am experienced with a number of languages, and am constantly looking for new technologies to learn.
I am currently working to build out my portfolio in general.
To the right are some examples of open-source projects I've worked on in a variety of commonly-used languages.
Click the info button to the side of one for more information on the specific project.
Portfolio
Education
East Carolina University
Bachelor's of Science in Computer Science
Specialized Coursework


Picturepark enables organizations to connect, manage and route content from its point of creation to where it’s needed - via API and user interaction.
Copyright & Terms
The Picturepark logo, name, sign and all associated marks, are registered trademarks of Vision Information Transaction (d/b/a Picturepark). Other marks and logos used in the Picturepark Cloud Service may be registered trademarks of corresponding copyright holders.
The Picturepark Cloud Service uses third party software components, licenses and open source software (collectively referred to as “Software”). Picturepark can provide you a list of these upon request or alternatively you can review them in the help section, which is visible after login.
The Cloud Service and Software is protected under copyright law and international treaties. Any unauthorized or prohibited use, reproduction or distribution of the Cloud Service or Software, or any portions thereof, may result in civil or criminal penalties and legal prosecution.
By using the Picturepark Cloud Service, you agree, at the minimum, with the Picturepark Acceptable Use Policy and other applicable terms and conditions: all of which are published upon log-in or sign-up and visible in the help section of the Picturepark Cloud Service.


Notice how the class
for each layer is set here. This allows the example
to determine how these individual layers appear with an efficient stylesheet and avoid
DOM manipulation. It also allows for dynamically updating the styles, such as when
hovering over the cooresponding legend item.
new c3.Plot.Layer.Line<CrossFilter.Grouping<number, number>>({
options: {
title: "% Services",
class: 'services',
},
data: services_by_year_data,
}),
new c3.Plot.Layer.Line<CrossFilter.Grouping<number, number>>({
options: {
title: "% Manufacturing",
class: 'manufacturing',
},
data: manufacturing_by_year_data,
}),
new c3.Plot.Layer.Line<CrossFilter.Grouping<number, number>>({
options: {
title: "% Agriculture",
class: 'agriculture',
},
data: agriculture_by_year_data,
}),


MISSION
The Unbranded seeks to humanize the process of professional branding while also establishing a reproducible, transparent, and ethically sound business structure. We pride ourselves in tailoring our work to reflect our clients' unique perspectives, while striving to consistently challenge ourselves and our clients to integrate an ethos of positive change into every action taken, no matter how big or small.
ABOUT
We are a web presence cooperative - a diverse* group of creatives that are passionate about collaborating with like-minded people to design authentic digital footprints that drive growth. As a collective of creators exploring new skills, we seek to work with fellow artists who are also on the path to establishing their portfolios and brand identities.
The Unbranded was formed from a group of innovators who share a mindset of cooperation, ethical business practices, and individualized, personal attention to client needs.
While we are still building our client base and skillset, we offer expert empathy, passion, and upfront flat rates. A vital aspect of our mission is to offer pro-bono services to marginalized business owners. We offer: Website Development and Design | Visual Design | Copywriting | Brand Cohesion.
*A note on diversity - we are proud of our current self-selecting team of four women but fully acknowledge that there is more diversity to be incorporated. We look forward to increasing team diversity as we grow and are focusing on a diverse client base in the meantime.
OUR WORK
Equip, LLC Consulting
Client, a business consultant, asked for a single-page, "lean, simple, elegant site that flows logically from what kinds of things can this company helps with to who are they to how do I start… a nature theme, something that conveys tranquility, knowledge, approachability, curiosity and a little bit of whimsy." Built on Wix and handed off so client could self-manage, as requested.
team members on project
Bespoke Pyro Co on Etsy
Video editing and copywriting done for Etsy shop owner.
team members on project
Robert Osborne Realestate
This realty website was built for the client using WordPress.
team members on project
Jenn Loves to Code Portfolio Site
Portfolio website built to highlight client's projects including HTML, CSS3 and Python.
team members on project
Police Brutality Awareness
DO WE ALSO WANT TO INCLUDE THIS IN THE SOCIAL JUSTICE SECTION? Using Rails and API, this site was built to highlight incidents of police brutality that may not be covered by traditional news outlets, but are being reported on social media.
team members on project
THE TEAM
SARAH BELING
Founder Advisor
Copywriting
Enamored at a young age with storytelling, Sarah tortured her family and friends throughout the 90s with re-worked revivals of classics like The Wizard of Oz and Annie (in which she gracefully accepted the title role). Sarah eventually moved to New York, attended NYU Tisch to study acting, threw out all of her clothing that wasn’t black, and developed a taste for bodega breakfast sandwiches. Sarah writes plays that range from thriller to 80s musical parody and is eager to help others tell their stories.
Jennifer Cameron
Web Development
A reluctant "techy," Jennifer started life with a strong emphasis on the arts: painting, acting, dance, and drawing (including an unfortunate incident involving a sharpie and her parent's carpet). However, a strong desire and affinity for logic and tech activities flowed though all aspects of life, school and work until she could no longer deny the pull and jumped into the world of web development. Jennifer now focuses on feeding both parts of her soul by creating things that are pleasing and functional.
AMELITA LIJEK
Founder
Business Ops and Design
Amelita has always had an instinct for management and organization. Beginning her executive career at age four when she dutifully (and, in retrospect, likely annoyingly) pointed out who was off of their line in ballet class, she has honed that intuition through a wide variety of jobs – working in everything from retail and fine dining to musical comedy and film production, with pit stops along the way to pick up some dog training skills and an undergrad degree from NYU. Her non-traditional path (though stressful for her parents) has taught her that following her gut when it comes to ethical values is essential and that this principle too often gets lost within workplaces. While pivoting to coding and design in the chaos of 2020, the idea for The Unbranded presented itself as an opportunity to constructively exercise her management skills, and more importantly put her values into practice. She is incredibly grateful and excited to get to do both with such a remarkable team beside her.
HEATHER RANDOLPH
Web Development
Heather is a Web Developer, Visual Designer, and Writer with a passion for storytelling in visual and narrative
formats. She has been building websites since 1997 and taking clients on a freelance basis since 2002. While her
development expertise lies in HTML and CSS, Heather also works with JavaScript, jQuery, Ruby, and Rails. She creates
visual art with Photoshop and Illustrator.
When Heather isn’t writing, developing, or designing, she can be found
cooking with her nephews, listening to technology or HP Lovecraft centric podcasts, or scrolling through Netflix
trying to decide what to watch.
CONTACT
We would love to hear from you! Fill out the form below and we'll get back to you as soon as possible.
SOCIAL JUSTICE
Social justice is an integral value at The Unbranded. We believe that ethical business practices and creativity should go hand in hand, and we are dedicated to working with clients and collaborators who believe in creating equity in representation at every level of business. We are committed to removing the gatekeeping of professional marketing services and making them accessible to all creative business owners. Our rate structure and pro-bono work will reflect a sustained dedication to taking on clients from traditionally marginalized groups, and we are always looking for new ways to incorporate positive social justice change into the everyday workings of the business.
Below you will find links to groups that co-owners currently feel need a spotlight. These groups have been vetted as far as any individual could vet a non-profit; we do not have resources beyond what an individual is capable of researching and we reserve the right to rescind links as new information surfaces. As with everything, this is a learning process, and admitting and learning from mistakes is important. As often as possible, if an organization is removed from our links because of a change of heart, we will share that information on our blog. Many links will be changed due to the team wanting to highlight more pressing issues, and links that we continue to support can be found on our Social Justice Archive page.
NOT ON GOOGLE DOC: We strive to maintain a 4:1 paid to pro-bono project ratio, and have from our inception.
SOCIAL JUSTICE RESOURCE LINKS
We want to highlight incidents of police brutality that may not be covered by traditional news outlets, but are being reported on social media.


{{ _('Chat with real users in ') }} {{ _('English') }} {{ _('or in') }} {{ _('Russian') }}
{{ _('in') }} {{ _('English') }} or in {{ _('Russian') }}
{{ _('ClickHouse meetups are essential for strengthening community worldwide, but they couldn\'t be possible without the help of local organizers. Please, feel this form if you want to become one or want to meet ClickHouse core team for any other reason.') }}
{{ _('If you have any more thoughts or questions, feel free to contact Yandex ClickHouse team directly at') }} {{ _('turn on JavaScript to see email address') }}.


Collaborative local media
The LocalWiki project is an ambitious effort to create community-owned, living information repositories that will provide much-needed context behind the people, places, and events that shape our communities. And we have already proven this basic idea can work and provide tremendous benefits to a community.
So much of the unique knowledge and experiences we acquire through years of living in a community gets spread only by word of mouth, or worse—just stays “locked up” in our heads. But this is great stuff, valuable expert knowledge that can benefit everyone — after all, when it comes to the communities where we live, we are all experts!
Help out & get more info!
Help out and get more information as we get started. This is an entirely open source effort, from the start!
{{ form.email.errors }}The Davis Wiki
In 2004 we started the Davis Wiki, an experimental project to collect and share interesting information about the town of Davis, California, editable by anyone, that soon became the world's largest and most vibrant community wiki.
Today the residents of Davis use it for everything from learning about local news and local history to helping return lost pets to their owners — and it's become the largest, most used media source in the city. In week, nearly half of residents use the Davis Wiki; in a month, nearly everyone uses it. And 1 in 7 residents contribute material to the Davis Wiki.
With your help, we want to help as many communities as possible realize the full potential of such an amazing, collaborative information resource. We have received a grant from the John S. and James L. Knight Foundation, as part of its Knight News Challenge, to develop the next generation of wiki software that is tailored to the needs of local communities.
Recommend a pilot community
We need your help finding great pilot communities for the project! Have an idea? Please let us know!
Essential Supporters
- Graham Freeman
- Angela Clark
- Davis Bike Collective
- Anonymous
Founding Supporters
- Jim Ratliff
- Andrew Chen
- Kenji Yamada
- Paul Ivanov
- Rodney Blackwell
- Andrew Leonard
- Jason Moore
- Jason Aller
- Jeff Shaw
- Lauren Giles
- Scott Meehleib
- Otis is a Dog
- Nick Schmalenberger
- Rob Roy
- Sheryl Schaffner
- Ryan Massie
- Blair Baldwin
- Charles McLaughlin
- Michelle Palmer
- Charles Roberson
- Jeff Tolentino
- Eugene Eric Kim
- Ryan Wold
- Amelia Gray
- Scott Lay
- Aaron Christopher Cohen
- Darach Miller
- Jose D Lopez
- Dina Biscotti and Siva Gunda
- David Dickson
- Christine Hjelmfelt
- The Domes
- Craig Blomberg
- Emily Tung
- Cobalt Salon & Gallery
- Dan Ryan
- Simon Fung
- Ian Leary
- Efrem Rensi
- Princess N' Aaron Curtin
- Nicholas Barry
- Doug Beeferman
- Bernadette Balics
- Paige Craig
- Denise Jago
- Mal Jago
- Tony Finnis
- Diane Cary
- Wyatt Pearsall
- Erie Vitiello
- Craig Brozinsky
- Zac Morris
- Diane C Murphey
- Robert Schanafelt
- Max Mikalonis
- Julia
- Sophia's Thai Kitchen
- Paul Lanzi
- Brian Fong
- Chris Lambertus
- Robert Schanafelt
- Alex Darocy
- Sharon Zimmerman
Supporters
- Josh Heller
- Nicole Aptekar
- Matt Lewis
- Terrana Cliff
- Kimberlie Kranich
- Michael Andersen
- Lizzy
- Gary Neustrom
- Hannah Moore
- Stephen Fairclough
- Debra Van Sickle
- Vinh Pham
- William Lewis
- Evan Edwards
- Bahareh Abhari
- Yawen Chen
- Tom Garberson
- Kristen Birdsall
- Erin Digitale
- Carlos Barahona
- Bliss Bruen
- JoePomidor
- Geoff
- Mike Linksvayer
- Adam Wennhold
- Brent Laabs
- Ryan Deussing
- Sue Hjerpe
- Marilyn Maciel
- Dagon Jones
- Roberta
- David Vernon
- Lee Yeung
- Kalen Gallagher
- Ben Antonius
- Victor Zapanta
- Amy Zimmerman
- Don and Vi Schaffner
- Dewitz
- York Ng
- Eric Toscano
- Kika
- Benny Brown
- Matteo Mattone
- Stephanie Thrasher
- Luke Grecki
- Dale Kunce
- Smit Shah
- Nihar Shah
- Ink Monkey Graphics
- Clara
- Maia
- Christian Kang
- Rick
- Tara Nonymous
- Leslie Madsen-Brooks
- Emily Goyins
- kathleen
- Matt Jurach
- Sally Hensel
- Laura Wynholds
- Cheyenne Cary
- Yumiko
- Brad Benedict
- Olivia Youngers
- June Huang
- Reragatz
- Craig Wells
- Nico Linesch
- Wrye Sententia
- Kurt Vaughn
- Bonnie Bilger
- Monica Vaz
- Besha Grey
- Peter Boulay
- Mikkel Marius Winther
- Megan Clements
- Kao Saechao
- Sharon Shewmake
- Tree
- Robert Barat
- Overland Music Distributors
- Aezlo
- ray porfiri
- Kevin Chuc
- Dave Menninger
- Ippie
- Brian
- Jesse Woo
- Paul Lopes
- Liz Ernst
- Sarah White
- Sarah Manley
- Ashley Smith
- Yogesh Simmhan
- Joady
- Peter Holmes a Court
- Ted
- Divonne Holmes a Court
- Jane
- Zak Clark
- Tobin Fricke
- Hendrik
- Anthony Bruce
- Barbara Mckee
- Christopher Michael
- Dorai Thodla
- Christopher Stollery
- Mort Clark
- Michael Milman
- Cindy Goode
- Anna Kostecke
- Andrew Frishman
- Jasmine Carlisle
- Kathy
- Rosanna Yau
- Kris Bulman
- Daniel Tancredi
- Alex Tafreshi
- Tori
- Kevin Hawkins
- Virginia Matzek
- Elle Cayabyab Gitlin
- Melanie Holmes
- Michael Trice
- Jamin Horn
- Bernard Kreissman
- Bev Sykes
- Scott Weintraub
- Stuart Thomas
- Joyce Maguire
- Nancy Wilson
- Abbie
- Michael Johnston
- Mike Adams
- Jessica Winters
- Steve
- Michelle Kang
- Gordon Windeyer
- Sunny Grace
- Max Yaffa
- William Gray
- Simon
- Nirgunan Tiruchelvam
- Con Karson
- Ben Gray
- Geoff Ball
- Ivan
- A Roach
- Anton Pound
- Derrick
- Misty
- Gavin Payne
- Katharine
- Sandy
- Paul Siegel
- Eric Blosch
- Mehdi Vahab
- Rachel Rogers
- Emmy Melton
- Roberta M.
- Jonathan London
- Matt Quan
- Itay Neta
- Cressida Downey
- Lois
- Zach Short
- Yell
- Joseph
- Hank Childs
- Jodi Morrison
- Saroja Subrahmanyan
- Tim Kerbavaz
- Harry Spanglet
- Kevin Liu
- Sam Logan
- Andrew Logan
- Emily Logan
- Monique Logan
- Jamie
- Terry Bellerby
- Stu Nash
- Gabriel Goldstein
- Meredith Clark
- Joel
- Michelle Accurso
- Francoise
- Brad Nickel
- Emmanuel Smith
- Brien Croteau
- Nathan Storey
- Regina Gelfovision
- Rebecca Newton
- Wes Hardaker
- Christy Marsden
- Kai Wu
- Cindy Spann
- Teruko Matsumura
- Pete Forsynth
- Dawei Lin
- Norbert
- Matt Frauenfelder
- James Allen
- Girst Folkmanis
- Laura Wardrip
- Petrea Marchand
- Amy Hereford
- Andrew Woo
- Katherine Lee
- Kim Helmbold
- Michelle Maranta
- H. Stanley
- Bartlett D. Moore
- Alex Mandel
- Michele
- Anonymous
- Malcolm
- Marcin
- Rubaiyat Shatner
- Irina Udaltsova
- Leighton T. Izu
- Bronte Brodie
- Nathanael Bettridge
- Craig Brady
- Mike Bellamy
- Mei-Lyn Peterson
- Derek Downey
- Rob Gysel
- Charolette Goodenough
- Amy Catania
- Linda
- Tomasz
- Tom Denton
- Eric Lee
- Julian Hofer
- Allison
- Erik Magnuson
- Jessica Lao
- Chelsea Gai
- Noah Leslie
- Christy Gurga
- Samuel Cole
- Molly Reagh
- Nick
- Kim Summerlin
- Chirakkal Easwaran
- Alessandra Rachid
- Patty Couse-Baker
- Dmitri Kozhevnikov
- Dan Sullivan
- Charles Gasser
- Teresa Kenny
- Luke Burns
- Deborah Morgenthal
- Weremoose


Applications
From 0 impressions
Pending Earnings $0.00
Paid Earnings $0.00
Next Payment Date 31-Dec-2014
If you are a legally registered business entity, enter the business name. If you are using it for your personal account, just enter your full name here.
Download and fill out the following form and complete the tax information
Enter your PayPal login id Here. Do note that your Paypal login might be different from your Fingertise login.


| Русский | Polski | 中文 | Castellano | 日本語 | Português do Brasil | Magyar | Srpski |
|
This is a linux command line reference for common operations. Examples marked with • are valid/safe to paste without modification into a terminal, so you may want to keep a terminal window open while reading this so you can cut & paste. All these commands have been tested both on Fedora and Ubuntu. |
| Command | Description | |
| • | apropos whatis | Show commands pertinent to string. See also threadsafe |
| • | man -t man | ps2pdf - > man.pdf | make a pdf of a manual page |
| which command | Show full path name of command | |
| time command | See how long a command takes | |
| • | time cat | Start stopwatch. Ctrl-d to stop. See also sw |
| • | nice info | Run a low priority command (The "info" reader in this case) |
| • | renice 19 -p $$ | Make shell (script) low priority. Use for non interactive tasks |
| dir navigation | ||
| • | cd - | Go to previous directory |
| • | cd | Go to $HOME directory |
| (cd dir && command) | Go to dir, execute command and return to current dir | |
| • | pushd . | Put current dir on stack so you can popd back to it |
| file searching | ||
| • | alias l='ls -l --color=auto' | quick dir listing |
| • | ls -lrt | List files by date. See also newest and find_mm_yyyy |
| • | ls /usr/bin | pr -T9 -W$COLUMNS | Print in 9 columns to width of terminal |
| find -name '*.[ch]' | xargs grep -E 'expr' | Search 'expr' in this dir and below. See also findrepo | |
| find -type f -print0 | xargs -r0 grep -F 'example' | Search all regular files for 'example' in this dir and below | |
| find -maxdepth 1 -type f | xargs grep -F 'example' | Search all regular files for 'example' in this dir | |
| find -maxdepth 1 -type d | while read dir; do echo $dir; echo cmd2; done | Process each item with multiple commands (in while loop) | |
| • | find -type f ! -perm -444 | Find files not readable by all (useful for web site) |
| • | find -type d ! -perm -111 | Find dirs not accessible by all (useful for web site) |
| • | locate -r 'file[^/]*\.txt' | Search cached index for names. This re is like glob *file*.txt |
| • | look reference | Quickly search (sorted) dictionary for prefix |
| • | grep --color reference /usr/share/dict/words | Highlight occurances of regular expression in dictionary |
| archives and compression | ||
| gpg -c file | Encrypt file | |
| gpg file.gpg | Decrypt file | |
| tar -c dir/ | bzip2 > dir.tar.bz2 | Make compressed archive of dir/ | |
| bzip2 -dc dir.tar.bz2 | tar -x | Extract archive (use gzip instead of bzip2 for tar.gz files) | |
| tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg' | Make encrypted archive of dir/ on remote machine | |
| find dir/ -name '*.txt' | tar -c --files-from=- | bzip2 > dir_txt.tar.bz2 | Make archive of subset of dir/ and below | |
| find dir/ -name '*.txt' | xargs cp -a --target-directory=dir_txt/ --parents | Make copy of subset of dir/ and below | |
| ( tar -c /dir/to/copy ) | ( cd /where/to/ && tar -x -p ) | Copy (with permissions) copy/ dir to /where/to/ dir | |
| ( cd /dir/to/copy && tar -c . ) | ( cd /where/to/ && tar -x -p ) | Copy (with permissions) contents of copy/ dir to /where/to/ | |
| ( tar -c /dir/to/copy ) | ssh -C user@remote 'cd /where/to/ && tar -x -p' | Copy (with permissions) copy/ dir to remote:/where/to/ dir | |
| dd bs=1M if=/dev/sda | gzip | ssh user@remote 'dd of=sda.gz' | Backup harddisk to remote machine | |
| rsync (Network efficient file copier: Use the --dry-run option for testing) | ||
| rsync -P rsync://rsync.server.com/path/to/file file | Only get diffs. Do multiple times for troublesome downloads | |
| rsync --bwlimit=1000 fromfile tofile | Locally copy with rate limit. It's like nice for I/O | |
| rsync -az -e ssh --delete ~/public_html/ remote.com:'~/public_html' | Mirror web site (using compression and encryption) | |
| rsync -auz -e ssh remote:/dir/ . && rsync -auz -e ssh . remote:/dir/ | Synchronize current directory with remote one | |
| ssh (Secure SHell) | ||
| ssh $USER@$HOST command | Run command on $HOST as $USER (default command=shell) | |
| • | ssh -f -Y $USER@$HOSTNAME xeyes | Run GUI command on $HOSTNAME as $USER |
| scp -p -r $USER@$HOST: file dir/ | Copy with permissions to $USER's home directory on $HOST | |
| ssh -g -L 8080:localhost:80 root@$HOST | Forward connections to $HOSTNAME:8080 out to $HOST:80 | |
| ssh -R 1434:imap:143 root@$HOST | Forward connections from $HOST:1434 in to imap:143 | |
| wget (multi purpose download tool) | ||
| • | (cd dir/ && wget -nd -pHEKk http://www.pixelbeat.org/cmdline.html) | Store local browsable version of a page to the current dir |
| wget -c http://www.example.com/large.file | Continue downloading a partially downloaded file | |
| wget -r -nd -np -l1 -A '*.jpg' http://www.example.com/dir/ | Download a set of files to the current directory | |
| wget ftp://remote/file[1-9].iso/ | FTP supports globbing directly | |
| • | wget -q -O- http://www.pixelbeat.org/timeline.html | grep 'a href' | head | Process output directly |
| echo 'wget url' | at 01:00 | Download url at 1AM to current dir | |
| wget --limit-rate=20k url | Do a low priority download (limit to 20KB/s in this case) | |
| wget -nv --spider --force-html -i bookmarks.html | Check links in a file | |
| wget --mirror http://www.example.com/ | Efficiently update a local copy of a site (handy from cron) | |
| networking (Note ifconfig, route, mii-tool, nslookup commands are obsolete) | ||
| ethtool eth0 | Show status of ethernet interface eth0 | |
| ethtool --change eth0 autoneg off speed 100 duplex full | Manually set ethernet interface speed | |
| iwconfig eth1 | Show status of wireless interface eth1 | |
| iwconfig eth1 rate 1Mb/s fixed | Manually set wireless interface speed | |
| • | iwlist scan | List wireless networks in range |
| • | ip link show | List network interfaces |
| ip link set dev eth0 name wan | Rename interface eth0 to wan | |
| ip link set dev eth0 up | Bring interface eth0 up (or down) | |
| • | ip addr show | List addresses for interfaces |
| ip addr add <IP_ADDRESS>/24 brd + dev eth0 | Add (or del) ip and mask (<IP_ADDRESS>) | |
| • | ip route show | List routing table |
| ip route add default via <IP_ADDRESS> | Set default gateway to <IP_ADDRESS> | |
| • | tc qdisc add dev lo root handle 1:0 netem delay 20msec | Add 20ms latency to loopback device (for testing) |
| • | tc qdisc del dev lo root | Remove latency added above |
| • | host pixelbeat.org | Lookup DNS ip address for name or vice versa |
| • | hostname -i | Lookup local ip address (equivalent to host `hostname`) |
| • | whois pixelbeat.org | Lookup whois info for hostname or ip address |
| • | netstat -tupl | List internet services on a system |
| • | netstat -tup | List active connections to/from system |
| windows networking (Note samba is the package that provides all this windows specific networking support) | ||
| • | smbtree | Find windows machines. See also findsmb |
| nmblookup -A <IP_ADDRESS> | Find the windows (netbios) name associated with ip address | |
| smbclient -L windows_box | List shares on windows machine or samba server | |
| mount -t smbfs -o fmask=666,guest //windows_box/share /mnt/share | Mount a windows share | |
| echo 'message' | smbclient -M windows_box | Send popup to windows machine (off by default in XP sp2) | |
| text manipulation (Note sed uses stdin and stdout. Newer versions support inplace editing with the -i option) | ||
| sed 's/string1/string2/g' | Replace string1 with string2 | |
| sed 's/\(.*\)1/\12/g' | Modify anystring1 to anystring2 | |
| sed '/ *#/d; /^ *$/d' | Remove comments and blank lines | |
| sed ':a; /\\$/N; s/\\\n//; ta' | Concatenate lines with trailing \ | |
| sed 's/[ \t]*$//' | Remove trailing spaces from lines | |
| sed 's/\([\\`\\"$\\\\]\)/\\\1/g' | Escape shell metacharacters active within double quotes | |
| • | seq 10 | sed "s/^/ /; s/ *\(.\{7,\}\)/\1/" | Right align numbers |
| sed -n '1000p;1000q' | Print 1000th line | |
| sed -n '10,20p;20q' | Print lines 10 to 20 | |
| sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q' | Extract title from HTML web page | |
| sed -i 42d ~/.ssh/known_hosts | Delete a particular line | |
| sort -t. -k1,1n -k2,2n -k3,3n -k4,4n | Sort IPV4 ip addresses | |
| • | echo 'Test' | tr '[:lower:]' '[:upper:]' | Case conversion |
| • | tr -dc '[:print:]' < /dev/urandom | Filter non printable characters |
| • | history | wc -l | Count lines |
| set operations (Note you can export LANG=C for speed. Also these assume no duplicate lines within a file) | ||
| sort file1 file2 | uniq | Union of unsorted files | |
| sort file1 file2 | uniq -d | Intersection of unsorted files | |
| sort file1 file1 file2 | uniq -u | Difference of unsorted files | |
| sort file1 file2 | uniq -u | Symmetric Difference of unsorted files | |
| join -a1 -a2 file1 file2 | Union of sorted files | |
| join file1 file2 | Intersection of sorted files | |
| join -v2 file1 file2 | Difference of sorted files | |
| join -v1 -v2 file1 file2 | Symmetric Difference of sorted files | |
| math | ||
| • | echo '(1 + sqrt(5))/2' | bc -l | Quick math (Calculate φ). See also bc |
| • | echo 'pad=20; min=64; (100*10^6)/((pad+min)*8)' | bc | More complex (int) e.g. This shows max FastE packet rate |
| • | echo 'pad=20; min=64; print (100E6)/((pad+min)*8)' | python | Python handles scientific notation |
| • | echo 'pad=20; plot [64:1518] (100*10**6)/((pad+x)*8)' | gnuplot -persist | Plot FastE packet rate vs packet size |
| • | echo 'obase=16; ibase=10; 64206' | bc | Base conversion (decimal to hexadecimal) |
| • | echo $((0x2dec)) | Base conversion (hex to dec) ((shell arithmetic expansion)) |
| • | units -t '100m/9.69s' 'miles/hour' | Unit conversion (metric to imperial) |
| • | units -t '500GB' 'GiB' | Unit conversion (SI to IEC prefixes) |
| • | units -t '1 googol' | Definition lookup |
| • | seq 100 | (tr '\n' +; echo 0) | bc | Add a column of numbers. See also add and funcpy |
| calendar | ||
| • | cal -3 | Display a calendar |
| • | cal 9 1752 | Display a calendar for a particular month year |
| • | date -d fri | What date is it this friday. See also day |
| • | [ $(date -d "tomorrow" +%d) = "01" ] || exit | exit a script unless it's the last day of the month |
| • | date --date='25 Dec' +%A | What day does xmas fall on, this year |
| • | date --date='@2147483647' | Convert seconds since the epoch (1970-01-01 UTC) to date |
| • | TZ=':America/Los_Angeles' date | What time is it on West coast of US (use tzselect to find TZ) |
| echo "mail -s 'get the train'<EMAIL_ADDRESS>< /dev/null" | at 17:45 | Email reminder | |
| • | echo "DISPLAY=$DISPLAY xmessage cooker" | at "NOW + 30 minutes" | Popup reminder |
| locales | ||
| • | printf "%'d\n" 1234 | Print number with thousands grouping appropriate to locale |
| • | BLOCK_SIZE=\'1 ls -l | get ls to do thousands grouping appropriate to locale |
| • | echo "I live in `locale territory`" | Extract info from locale database |
| • | LANG=en_IE.utf8 locale int_prefix | Lookup locale info for specific country. See also ccodes |
| • | locale | cut -d= -f1 | xargs locale -kc | less | List fields available in locale database |
| recode (Obsoletes iconv, dos2unix, unix2dos) | ||
| • | recode -l | less | Show available conversions (aliases on each line) |
| recode windows-1252.. file_to_change.txt | Windows "ansi" to local charset (auto does CRLF conversion) | |
| recode utf-8/CRLF.. file_to_change.txt | Windows utf8 to local charset | |
| recode iso-8859-15..utf8 file_to_change.txt | Latin9 (western europe) to utf8 | |
| recode ../b64 < file.txt > file.b64 | Base64 encode | |
| recode /qp.. < file.txt > file.qp | Quoted printable decode | |
| recode ..HTML < file.txt > file.html | Text to HTML | |
| • | recode -lf windows-1252 | grep euro | Lookup table of characters |
| • | echo -n 0x80 | recode latin-9/x1..dump | Show what a code represents in latin-9 charmap |
| • | echo -n 0x20AC | recode ucs-2/x2..latin-9/x | Show latin-9 encoding |
| • | echo -n 0x20AC | recode ucs-2/x2..utf-8/x | Show utf-8 encoding |
| CDs | ||
| gzip < /dev/cdrom > cdrom.iso.gz | Save copy of data cdrom | |
| mkisofs -V LABEL -r dir | gzip > cdrom.iso.gz | Create cdrom image from contents of dir | |
| mount -o loop cdrom.iso /mnt/dir | Mount the cdrom image at /mnt/dir (read only) | |
| cdrecord -v dev=/dev/cdrom blank=fast | Clear a CDRW | |
| gzip -dc cdrom.iso.gz | cdrecord -v dev=/dev/cdrom - | Burn cdrom image (use dev=ATAPI -scanbus to confirm dev) | |
| cdparanoia -B | Rip audio tracks from CD to wav files in current dir | |
| cdrecord -v dev=/dev/cdrom -audio *.wav | Make audio CD from all wavs in current dir (see also cdrdao) | |
| oggenc --tracknum='track' track.cdda.wav -o 'track.ogg' | Make ogg file from wav file | |
| disk space (See also FSlint) | ||
| • | ls -lSr | Show files by size, biggest last |
| • | du -s * | sort -k1,1rn | head | Show top disk users in current dir. See also dutop |
| • | df -h | Show free space on mounted filesystems |
| • | df -i | Show free inodes on mounted filesystems |
| • | fdisk -l | Show disks partitions sizes and types (run as root) |
| • | rpm -q -a --qf '%10{SIZE}\t%{NAME}\n' | sort -k1,1n | List all packages by installed size (Bytes) on rpm distros |
| • | dpkg-query -W -f='${Installed-Size;10}\t${Package}\n' | sort -k1,1n | List all packages by installed size (KBytes) on deb distros |
| • | dd bs=1 seek=2TB if=/dev/null of=ext3.test | Create a large test file (taking no space). See also truncate |
| • | > file | truncate data of file or create an empty file |
| monitoring/debugging | ||
| • | tail -f /var/log/messages | Monitor messages in a log file |
| • | strace -c ls >/dev/null | Summarise/profile system calls made by command |
| • | strace -f -e open ls >/dev/null | List system calls made by command |
| • | ltrace -f -e getenv ls >/dev/null | List library calls made by command |
| • | lsof -p $$ | List paths that process id has open |
| • | lsof ~ | List processes that have specified path open |
| • | tcpdump not port 22 | Show network traffic except ssh. See also tcpdump_not_me |
| • | ps -e -o pid,args --forest | List processes in a hierarchy |
| • | ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d' | List processes by % cpu usage |
| • | ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS | List processes by mem usage. See also ps_mem.py |
| • | ps -C firefox-bin -L -o pid,tid,pcpu,state | List all threads for a particular process |
| • | ps -p 1,2 | List info for particular process IDs |
| • | last reboot | Show system reboot history |
| • | free -m | Show amount of (remaining) RAM (-m displays in MB) |
| • | watch -n.1 'cat /proc/interrupts' | Watch changeable data continuously |
| system information (see also sysinfo) ('#' means root access is required) | ||
| • | uname -a | Show kernel version and system architecture |
| • | head -n1 /etc/issue | Show name and version of distribution |
| • | cat /proc/partitions | Show all partitions registered on the system |
| • | grep MemTotal /proc/meminfo | Show RAM total seen by the system |
| • | grep "model name" /proc/cpuinfo | Show CPU(s) info |
| • | lspci -tv | Show PCI info |
| • | lsusb -tv | Show USB info |
| • | mount | column -t | List mounted filesystems on the system (and align output) |
| • | grep -F capacity: /proc/acpi/battery/BAT0/info | Show state of cells in laptop battery |
| # | dmidecode -q | less | Display SMBIOS/DMI information |
| # | smartctl -A /dev/sda | grep Power_On_Hours | How long has this disk (system) been powered on in total |
| # | hdparm -i /dev/sda | Show info about disk sda |
| # | hdparm -tT /dev/sda | Do a read speed test on disk sda |
| # | badblocks -s /dev/sda | Test for unreadable blocks on disk sda |
| interactive (see also linux keyboard shortcuts) | ||
| • | readline | Line editor used by bash, python, bc, gnuplot, ... |
| • | screen | Virtual terminals with detach capability, ... |
| • | mc | Powerful file manager that can browse rpm, tar, ftp, ssh, ... |
| • | gnuplot | Interactive/scriptable graphing |
| • | links | Web browser |
| • | xdg-open http://www.pixelbeat.org/ | open a file or url with the registered desktop application |
| miscellaneous | ||
| • | alias hd='od -Ax -tx1z -v' | Handy hexdump. (usage e.g.: • hd /proc/self/cmdline | less) |
| • | alias realpath='readlink -f' | Canonicalize path. (usage e.g.: • realpath ~/../$USER) |
| • | set | grep $USER | Search current environment |
| touch -c -t<PHONE_NUMBER> file | Set file timestamp (YYMMDDhhmm) | |
| • | python -m SimpleHTTPServer | Serve current directory tree at http://$HOSTNAME:8000/ |
© Jan 7 2008


This guide explains how an installation of the network components of MakerLab can be accomplished.
We suggest that this installation be performed on a different machine than where
the core components are installed and on one with good CPU performance,
a lot of storage space and at least two network interfaces (alternatively create
two virtual interfaces) and a lot of storage space. Also, make sure you have
port 22 (for SSH interaction with the dml-servant
), 4789 (for the VxLAN tunnel)
and 6653 (for OpenFlow packets).
This guide covers the installation of the datacenter side only, since the switch at the DETI MakerLab room may be OpenFlow switch ou simply a computer with multiple ethernet interfaces and Open vSwitch running.
These instructions are also at the network
repository, as well as the code
to run everything. We also recommend that you perform this installation on
a Debian Jessie machine, since it’s the only distro where we guarantee
full compatibility.
Updates
sudo apt-get update
sudo apt-get -y upgrade
Necessary packets
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
vim \
git \
python3-dev \
python3-pip \
linux-image-amd64 \
uuid-runtime \
libpq-dev \
postgresql-client \
gcc \
automake \
make
Adding Debian testing repository
It’s necessary to add the testing
repository in order to update to the latest
kernel version, due to Open vSwitch compatibility.
echo 'deb http://http.us.debian.org/debian testing main non-free contrib' >> /etc/apt/sources.list
echo 'deb-src http://http.us.debian.org/debian testing main non-free contrib' >> /etc/apt/sources.list
Update Kernel version
In order to support VxLAN tunnels, Open vSwitch requires the most up to date kernel image.
sudo apt-get update
sudo apt-get install linux-headers-4.9.0-3-amd64 linux-image-4.9.0-3-amd64
sudo reboot
Open vSwitch
wget http://openvswitch.org/releases/openvswitch-2.7.0.tar.gz
tar -xf openvswitch-2.7.0.tar.gz
cd openvswitch-2.7.0/
./configure
make
make install
export PATH=$PATH:/usr/local/share/openvswitch/scripts
ovs-ctl --system-id=random start
cd
Docker
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get -y install docker-ce
sudo service docker start
sudo usermod -aG docker $USER
sudo systemctl enable docker
Docker fix
sudo echo 'GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1" ' >> /etc/default/grub
sudo update-grub
sudo reboot
Network repo
git clone git@gitlab.com:makerlab/network.git
OvS-Docker
This script contains a command-line interface to attack containers to Open vSwitch bridges.
sudo cp network/datacenter-master/ovs-docker /usr/bin
sudo chmod a+rwx /usr/bin/ovs-docker
Ryu OpenFlow controller
Installation of the OpenFlow SDN controller framework.
git clone git://github.com/osrg/ryu.git
cd ryu
pip3 install .
Python
This installation handles system-wide packages used by DML’s network.
sudo pip3 install flask docker psycopg2
Open vSwitch bridges
Install the needed bridges. It requires at least two network interfaces.
Routing bridge
sudo ovs-vsctl add-br br-routing
sudo ovs-vsctl add-port br-routing eth1
VTEP bridge
DML_IP=x.x.x.x
sudo ovs-vsctl add-br br-vtep
sudo ovs-vsctl set-fail-mode br-vtep secure # make flows permanent
Add and configure VxLAN VTEP
sudo ovs-vsctl add-port br-vtep vxlan-vtep
sudo ovs-vsctl set bridge br-vtep protocols=OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13
sudo ovs-vsctl set interface vxlan-vtep type=vxlan options:remote_ip=${DML_IP} options:key=flow
Containers
Build pre-defined Docker containers.
Router container
cd ~/network/datacenter-master/router-container/
docker build -t router -f Dockerfile .
Ubuntu with SSH server container
cd ../ubuntu-ssh-container/
docker build -t ubuntu_ssh -f Dockerfile .
cd ..
Postgres
POSTGRES_PASSWORD=**** \
docker run --restart=always --name dml-postgres -p <IP_ADDRESS>:5433:5432 \
-e POSTGRES_PASSWORD="$POSTGRES_PASSWORD" -d postgres
psql -h <IP_ADDRESS> -p 5432 -U postgres postgres < db.sql
Startup script
This script will automatically start OvS, Docker and all the containers that were running when the system went down.
sudo cp /home/dml-net/network/datacenter-master/dml_startup.sh /etc/init.d/
sudo chmod +x /etc/init.d/dml_startup.sh
sudo update-rc.d dml_startup.sh defaults


I am an aspiring UX designer and researcher based in Scotland. Originally from San Francisco, where I worked in content for Yelp, I moved to Europe to pursue higher education.
I recently completed a Masters in Human-Computer Interaction I am looking for opportunities in UX research and/or design.
ResumeBelow are selected works I have completed during the course of my studies at St Andrews. They explore topics of work domain research, user-centred design, qualitative analysis, sketching solutions, wire-framing, prototyping, and implementation of interactive software.
"Researching and Redesigning the Digital Work Environment of Mental Health Care Providers"
Ginger.io is a startup based in San Francisco that delivers mental health care through an app. The company contracted me and Sara Koay to investigate their providers’ current working environment and recommend changes to improve the user experience and workflow. Our recommendations were also intended to consider how to increase the providers’ response times and allow them to care for higher numbers of members. Furthermore, the company wanted us to investigate if a mobile experience would be an appropriate addition to the providers’ desktop-based work environment. The project aims to learn about the providers’ working domain and user requirements, assess the appropriateness of a mobile experience for them, and use any findings to design and validate an appropriate digital experience.
To comply with my non-disclosure agreement, I have omitted and obfuscated confidential information. The information in this case study is my own and does not necessarily reflect the views of Ginger.io.
As I worked in tandem with another researcher, we collaborated on all phases of the project. This included:
These phases and their relevant milestones are illustrated in the figure below. The figure, adapted from John Furness's "A Website Designed", details all contributions made by the research team and Ginger.io during the 9 week project.
As this was a project spanning three months with a remote client, there were several constraints we had to operate within. The main challenges were:
Our approach to the project centred on two things:
As this project is still wrapping up, I am not able to exhibit the insights and designs from our work.
The aim of this project was to design a networks-based system that could benefit Scottish tourism. My group, consisting of 4 members, came up with an app concept that allowed Scottish tourists to play an augmented reality (AR) game that guided them to different historical landmarks. The app, STAAR Tours, augments the view of Scottish landmarks as part of an educational game for traveling students. The concept was delivered in a combination of an informational website, a video marketing and demoing the app, and a working prototype of the application.
As our group's output was a combination of many items, I took responsibility for the designs and concept video for the app. This required me to look into the state of the art AR and apply features to the game concept.
Our project had to consider the implications of implementing an AR app. This lead us to investigate relevant benefits and challenges to implementing AR technology.
The primary benefits of the use of AR with tourism are:
The main challenges to implementing AR are:
The wide range of requirements gave the design of the game some considerations when striking a balance between creating a unique and memorable experience, whilst meeting the needs of the userbase.
The primary features available in mobile AR include:
The design process therefore considered the AR elements that would be part of the game and how each screen would look on the mobile app. When designing the interface screens, I built on the game concept that another member proposed. Designs were made in Sketch and GIMP and animated in Keynote.
The game enlists the user as an agent that is given a mission to defeat a time- travelling criminal. In order to defeat the criminal, the agent must go to historical Scottish landmarks and correct the historical facts that the criminal has disturbed. In order to correct history, the agent must point their camera at the landmark and the correct historical facts will appear in view. They will then be asked to answer a question about the landmark in order to move on to the next one. After they have completed the quizzes at all the landmarks, they complete the game by correcting history and banishing the criminal. The purpose of the game is to be fun and educational while guiding the users through a city. The game is best suited for cities that can be toured on foot.
The screens I designed for the app are shown in the following figure. The animations for the screens are illustrated in the video below.
As part of a User-Centred Design module, I was teamed up with three colleagues to research and design an app called Peruse. We were matched with a client wishing to implement the app concept and listened to their vision for the app while also factoring in our own research. The app, Peruse, is a two-sided (for shoppers and shop owners), location-based product search engine that matches shoppers with products near them. The products are listed by the local businesses (shop owners).
As this was a group project, all members collaborated on the research and analysis evenly. Once the design stages started, the team split between the two sides of the app (shopper and shop owner), with me and another member focusing on the shopper-facing app. This involved sketching ideas and user journeys, creating elements in Sketch, protoyping screens in InVision, and animating screens in Keynote for our final presentation.
The group faced two main challenges while carrying out this project:
Our methodology was largely guided by two books that were taught as part of the course: The UX Book by Hartson & Pyla and Sketching User Experiences: The Workbook by Greenberg and authors.
The UX Book takes a user-centred design approach to the entire UX design lifecycle. In the book, Hartson describes how to approach usability problems by gaining insight into the work roles and tasks within a domain. These insights are achieved by conducting a contextual inquiry and analysis to build a list of system requirements, and design-informing models. This forms the basis for a subsequent continuous cycle of designing, testing, and evaluating that comes together into UX lifecycle template called the Wheel (below).This template was the basis of the overall structure of this project.
Sketching the User Experience: The Workbook helped guide our approach to coming up with design ideas, in the form of sketching. The book approaches sketching as a way to generate, draft and communicate ideas without being limited by tools and to encourage a continuous and iterative process. This iterative process is part of Stuart Pugh’s (1990) “Design Funnel”, that argues for the generation and convergence of ideas, with the process gradually converging to a final concept. The iterative design stages of the funnel communicate that the designer generates and reduces ideas until resolution.
Our research consisted of observations and in-depth interviews with participants who matched our user base. This included shoppers and shop owners who owned smart phones.
These methods were designed to learn as much about the domain of the intended user base without our proposed system. This involved observing shoppers' actions as they searched for an item in St Andrews, and observing shop owners manage and sell inventory.
Our investigation into the domain helped us elicit many insights into the work domain.
For shoppers:
For shop owners:
To better communicate our solution and understand its purpose, the team sketched various scenarios for pain points that arose during our research. Below shows a scenario I sketched of a participant not being able to find a business due to inaccurate listing information.
Scenarios were sketched to illustrate point points that exist within the shopping domain and then sketched again to illustrate how Peruse could solve the paint points (below).
The design phase was guided by the pain points, or problems, identified in the research. The team therefore set out to come up with as many solutions as possible for the problems Peruse should solve. This included solutions that took both a conservative and out-of-the-box approach.
For instance, a solution I proposed for inaccurate listing information was either to indicate to the user when the listing was last updated (conservative) or have a mail and telephone verification system (out-of-the-box). (Illustrated below)
After the team synced up the designs for the solutions, we began prototyping at a low-fidelity. This involved creating a smartphone out of foam board and using a strip of paper with the different mobile screens to simulate interaction.
Prototyping continued with creating elements in Sketch and transfering the screens to InVision for a more high-fidelity interaction. This helped prepare us for our presentation to our client, where I animated the app in Keynote for more accurate element-based interaction (see gif below).
The final solution I designed for the shopper app includes features that offer a solution to the major pain points discovered in our research, including:
Beyond designing ideas, I have also implemented several projects on interactive platforms. Below depicts a use-case scenario for an Android app I implemented on a Galaxy Nexus 7. The app, "Ghost", enables a user to draw via touch and view their drawing in a separate activity, and/or save to their device.


|
CUGL
2.0
|
#include <cugl.h>
Public Member Functions | |
| Camera () | |
| Camera (const Point &eye, const Point &model, const Vector &up) | |
| Camera (const Point &eye, const Point &model) | |
| Camera (const Point &eye) | |
| void | set (const Point &eye, const Point &model, const Vector &up) |
| void | set (const Point &eye, const Point &model) |
| void | set (const Point &eye) |
| virtual void | idle () |
| void | apply () const |
| void | moveUp (GLfloat distance) |
| void | moveForward (GLfloat distance) |
| void | moveLeft (GLfloat distance) |
| void | tiltUp (double angle) |
| void | panLeft (double angle) |
| void | setMode (bool mode) |
| Public Member Functions inherited from cugl::BaseCamera | |
| BaseCamera () | |
| void | setSteps (int s) |
| virtual void | update () |
Protected Member Functions | |
| void | update (const Point &e, const Point &m) |
Protected Attributes | |
| Point | eye |
| Point | eyeOld |
| Point | eyeNew |
| Point | model |
| Point | modelOld |
| Point | modelNew |
| Vector | up |
| bool | smooth |
| Protected Attributes inherited from cugl::BaseCamera | |
| int | steps |
| int | maxSteps |
Friends | |
| std::ostream & | operator<< (std::ostream &os, const Camera &c) |
An instance represents a camera. An instance of class Camera
is used to control the view. The function Camera::apply()
calls gluLookAt()
with appropriate parameters. The other functions of this class set up these parameters.
Camera movements may be smooth (interlpolated between end points) or abrupt. The function Camera::setMode() determines the kind of movement. Smooth transitions are obtained by calling Camera::idle()
in the GLUT idle callback function, together with the various camera movement functions.
| cugl::Camera::Camera | ( | ) |
Construct a default camera. The view is set as follows: Eye = (0,0,1). Model=(0,0,0). Up=(0,1,0).
Construct a camera for a particular view.
| eye | sets the eye coordinates for gluLookAt() . |
| model | sets the model coordinates for gluLookAt() . |
| up | sets the 'up' vector for gluLookAt() . |
Construct a camera for a particular view. The 'up' vector is set to (0,1,0).
| eye | sets the eye coordinates for gluLookAt() . |
| model | sets the model coordinates for gluLookAt() . |
|
explicit |
Construct a camera for a particular view. The 'up' vector is set to (0,1,0). The model point is set to (0,0,0).
| eye | sets the eye coordinates for gluLookAt() . |
|
virtual |
Apply the camera position to the model-view matrix. This function calls gluLookAt()
with appropriate parameters. It should be called in the GLUT display function or its equivalent after the model-view matrix has been initialized.
Implements cugl::BaseCamera.
|
virtual |
Update the camera position. This function should be called from the GLUT idle() function or its equivalent. It performs one step of the motion until the motion is complete, after which it has no effect.
Implements cugl::BaseCamera.
| void cugl::Camera::moveForward | ( | GLfloat | distance | ) |
Move the camera forwards. The camera moves towards the model.
| distance | gives the amount of movement. Negative values move the camera away from the model.. |
| void cugl::Camera::moveLeft | ( | GLfloat | distance | ) |
Move the camera to its left.
| distance | gives the amount of movement. Negative values move the camera to its right. |
| void cugl::Camera::moveUp | ( | GLfloat | distance | ) |
Move the camera upwards (+Y direction).
| distance | gives the amount of movement. Negative values move the camera downwards. |
| void cugl::Camera::panLeft | ( | double | angle | ) |
Pan the camera to the left.
| angle | gives the angle through which the camera should be panned. Negative values give panning to the right. |
Set the camera for a particular view.
| eye | sets the eye coordinates for gluLookAt() . |
| model | sets the model coordinates for gluLookAt() . |
| up | sets the 'up' vector for gluLookAt() . |
Set the camera for a particular view. The 'up' vector is set to (0,1,0).
| eye | sets the eye coordinates for gluLookAt() . |
| model | sets the model coordinates for gluLookAt() . |
| void cugl::Camera::set | ( | const Point & | eye | ) |
Set the camera for a particular view. The model point is set to (0,0,0). The 'up' vector is set to (0,1,0).
| eye | sets the eye coordinates for gluLookAt() . |
|
inline |
| void cugl::Camera::tiltUp | ( | double | angle | ) |
Tilt the camera upwards.
| angle | gives the angle through which the camera should be moved. Negative values give a downward tilt. |
Update the camera position.
|
friend |
Write a representation of the camera to a stream. This function displays the current settings of the eye point, the model point, and the up vector.
| os | is a reference to an output stream. |
| c | is a reference to a camera. |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |


Class L1DragonchainTransactionHeader
Inheritance
System.Object
L1DragonchainTransactionHeader
Inherited Members
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.ToString()
Namespace: dragonchain_sdk.Transactions.L1
Assembly: dragonchain-sdk.dll
Syntax
public class L1DragonchainTransactionHeader
Properties
| Improve this Doc View SourceBlockId
The block id to which this transaction was fixated
Declaration
[JsonProperty(PropertyName = "block_id")]
public string BlockId { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
DcId
The dragonchainId which originally received this transaction
Declaration
[JsonProperty(PropertyName = "dc_id")]
public string DcId { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Invoker
The optional GUID of a smart-contract transaction which triggered this record. SC invocation requests are null here, their output will contain the transaction ID of their invokation request transaction
Declaration
public string Invoker { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Tag
Free-form string of search searchable data submitted by the transaction author
Declaration
public string Tag { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Timestamp
Unix timestamp of when this transaction was first processed
Declaration
public string Timestamp { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
TransactionId
The GUID of this transaction
Declaration
[JsonProperty(PropertyName = "txn_id")]
public string TransactionId { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
TransactionType
Name of a smart contract, or 'transaction'
Declaration
[JsonProperty(PropertyName = "txn_type")]
public string TransactionType { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |


Study UID Importer API¶
-
class
xnat_wrapper.uid_importer.
UIDImporter
(xnat, project, uids=[], filters={}, studies={})¶ Class that provides methods to import studies/scans to an XNAT project using a list of study UIDs.
- Parameters
xnat (class) – An open XNAT connection via pyxnat.Interface()
project (str) – Name of the XNAT project
uids (str or list, optional) – A list of study UIDs that will be imported
filters (dict, optional) – Dictionary with keys corresponding to the keyword (e.g. seriesDescription) and values corresponding to a list of approved values (e.g. [Ax T1,`Ax T2`]).
studies (dict, optional) – Dictionary with key values corresponding to study UIDs and values corresponding to study descriptions.
-
__init__
(xnat, project, uids=[], filters={}, studies={})¶ Constructor method
-
__weakref__
¶ list of weak references to the object (if defined)
-
check_import_queue
(project=None)¶ Checks the XNAT import queue for all items related to the project
- Parameters
project (str, optional) – The name of the project which will be used to filter the studies
- Returns
Dictionary containing the total number of sessions, total number of scans, and a list of all sessions
- Return type
dict
-
find_studies
(uids=[])¶ Find studies using a list of study UIDs
- Parameters
uids (list, optional) – List of study UIDs
-
get_studies
()¶ Get the list of currently loaded studies
- Returns
Dictionary with key values corresponding to study UIDs
- Return type
dict
-
import_studies
(studies=None)¶ Imports a list of studies into an XNAT project
- Parameters
studies (dict, optional) – Dictionary with key values corresponding to study UIDs
- Returns
True if request was successful, False otherwise
- Return type
bool
-
monitor_import_queue
(timeout=180, time_refresh=True)¶ Monitors the status of studies that are being imported to a project.
- Parameters
timeout (int, optional) – The amount of time (in seconds) to monitor the queue, defaults to 180
time_refresh (bool, optional) – Tells the monitor whether or not to restart the timeout if there is a status change, defaults to True
-
set_filters
(filt={})¶ Sets the filters that will be used to filter the list of studies imported into a project.
- Parameters
filt (dict, optional) – Dictionary with keys corresponding to the keyword (e.g. seriesDescription) and values corresponding to a list of approved values (e.g. [Ax T1,`Ax T2`]).
-
set_project
(project)¶ Sets the project name for the UID importer
- Parameters
project (str) – Name of the XNAT project
-
set_scp_params
(project=None)¶ Sets the parameters for the XNAT DICOM/SCP connection.
- Parameters
project (str, optional) – Name of the XNAT project to use
-
set_uids
(uids=[])¶ Sets the UIDs that the import tool will look for and download (if found).
- Parameters
uids (list or str, optional) – Single or list of study UIDs


Wide Angle lens
Auto Focus
FHD+ Display
Touch Screen Support
M1 Chip
1TB Storage
6GB RAM
FHD+ Resolutions
Water Resistant
Dust Proof
Active Noise Cancellation
Bluetooth 5.0


The Story
clouddeveloper.io website was started as a hoby project when recording youtube videos. The purpose of this website is to learn easy and efficient ways of being able to write interactive, functional, and appealing websites. We hope that you enjoy the content that is on this website as we keep on adding to it.


Discovering the Middle Kingdom
The walls built by the Ming dynasty measure 8,850 km
Cormorant fishing is a traditional fishing method in which fishermen use trained cormorants to fish in rivers.
The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China.
The former Chinese imperial palace and state residence of the Emperor of China from the Ming dynasty to the end of the Qing dynasty.
Chinese tea is consumed throughout the day as a substitute for plain water or for simple pleasure.
While the dragon has often served as China's national symbol, internationally the giant panda has often filled this role.


License Country:
Dr.
India
Barbados
United States of America
Issue Date
IATA
Driver License Number:
Expiry Date
Phone 1
Address:
Phone 2
Fax 1


NoobNote
About
Download
What's New
|
Github
Contact
NoobNote v.2.1 Youtube Showcase, if for privacy, watch
here


Push Notification
Created by Joe Burgess
So What Is Push?
It's the final frontier of AJAX.
Why Not Just Poll
- Peformance
- Usability
- Scalability
How Does It Work?
- Browser keeps an open connection to a server
- Used to be non standardized and hard
Intorducing....
WebSockets
WebSockets
Standarized way for bi-directional realtime
communication between servers
Faye
- Node.JS server
- Clients for Node.JS and Rails
Start The Server
- Install the Faye and Thin Gems
- Create a rack file
- Run It!
Pub/Sub
The pusher publishes a message on
a channel.
The subscriber subscribes to a channel.
Any MASSIVE GLARING Problems?
Yup
Security! Anyone can post to faye right now.
Let's write a Faye Extension
Yup
Order of messages is not guaranteed.
Performance
- Open Connection for every subscriber
- Pushing Data vs. Pushing Notification


Apache Spark, Spark and the Spark logo are trademarks of the Apache Software Foundation (ASF). The ASF is a 501(c)(3) nonprofit organization, and as such, needs to take special care about how its trademarks are used by organizations. In particular, ASF needs to ensure that its software products are clearly distinguished from third-party products.
If you would like to provide software, services, events, or other products based on Apache Spark, please refer to the ASF trademark policy and FAQ. This page summarizes the key points of the policy, but please note that the official policy always takes precedence.
Written materials must refer to the project as “Apache Spark” in the first and most prominent mentions. Materials from software vendors or software-related service providers must follow stricter guidelines, including using the full project name “Apache Spark” in more locations, and proper trademark attribution on every page.
Logos derived from the Spark logo are not allowed.
Domain names containing “spark” are not permitted without written permission from the Apache Spark PMC. To request permission, email<EMAIL_ADDRESS>and CC<EMAIL_ADDRESS>(Details)
We appreciate the community’s help in respecting these guidelines. If you have any questions about the Apache trademark policy, please email trademarks@apache.org.


starbase was created in early 2017, shortly after webpack 2 was released and it became clear that many popular development boilerplates were not being maintained or upgraded to the latest versions of the software they were built to utilize.
The primary mission of starbase is to provide an elegant but simple baseline development process that generates clean, production-ready assets while being bloat-free and easy to maintain.
starbase enables developers to spin up new projects and begin coding within minutes instead of hours. It is ready, right out of the box, to watch your code during development and can handle production builds when you're ready to integrate and/or deploy.
The watch
command uses webpack-dev-server to serve up your project on a development server (localhost) which will recompile and lint as you modify the source. You can even access this web server via LAN, with a static IP, for testing your app on multiple devices.
The build
command will compile production-ready (linted, minified & optimized) assets that can be integrated into your CMS theme or used as a standalone static website.
starbase is open source and completely free for personal or commercial use. It is a personal project-- a living code styleguide and outlet for technical exploration that you can make your own if you dig it. Pick it up, check it out and make it do a barrel roll.
If you encounter any problems along the way, please be sure to report an issue on GitHub and it'll likely be taken care of faster than you think!


|
SPHinXsys
alpha version
|
Abstract base class of a general SPH kernel function which is a smoothed Dirac delta function, a kernel function is radial symmetric, and has a scaling factor. Based on difference data type in 2d or 3d buildings, the kernel is defined for 2 and 3 dimensions. The kernel gives value one at the origin. The naming of kernel function follows the stand SPH literature. Currently, only constant smoothing length is applied. Basically, one can assign different kernel for different particle interactions. More...
#include <base_kernel.h>
Inherited by SPH::KernelCubicBSpline, SPH::KernelHyperbolic, SPH::KernelLaguerreGauss, SPH::KernelQuadratic, SPH::KernelTabulated< KernelType >, and SPH::KernelWendlandC2.
Public Member Functions | |
| Kernel (Real h, const std::string &kernel_name="Kernel") | |
| std::string | Name () const |
| Real | SmoothingLength () const |
| virtual Real | KernelSize () const |
| Real | CutOffRadius () const |
| Real | FactorW1D () const |
| Real | FactorW2D () const |
| Real | FactorW3D () const |
| virtual Real | W (const Real &r_ij, const Real &displacement) const |
| virtual Real | W (const Real &r_ij, const Vec2d &displacement) const |
| virtual Real | W (const Real &r_ij, const Vec3d &displacement) const |
| virtual Real | W_1D (const Real q) const =0 |
| virtual Real | W_2D (const Real q) const =0 |
| virtual Real | W_3D (const Real q) const =0 |
| virtual Real | W0 (const Real &point_i) const |
| virtual Real | W0 (const Vec2d &point_i) const |
| virtual Real | W0 (const Vec3d &point_i) const |
| virtual Real | dW (const Real &r_ij, const Real &displacement) const |
| virtual Real | dW (const Real &r_ij, const Vec2d &displacement) const |
| virtual Real | dW (const Real &r_ij, const Vec3d &displacement) const |
| virtual Real | dW_1D (const Real q) const =0 |
| virtual Real | dW_2D (const Real q) const =0 |
| virtual Real | dW_3D (const Real q) const =0 |
| virtual Real | d2W (const Real &r_ij, const Real &displacement) const |
| virtual Real | d2W (const Real &r_ij, const Vec2d &displacement) const |
| virtual Real | d2W (const Real &r_ij, const Vec3d &displacement) const |
| virtual Real | d2W_1D (const Real q) const =0 |
| virtual Real | d2W_2D (const Real q) const =0 |
| virtual Real | d2W_3D (const Real q) const =0 |
| Real | CutOffRadius (Real h_ratio) const |
| Real | W (const Real &h_ratio, const Real &r_ij, const Real &displacement) const |
| Real | W (const Real &h_ratio, const Real &r_ij, const Vec2d &displacement) const |
| Real | W (const Real &h_ratio, const Real &r_ij, const Vec3d &displacement) const |
| Real | W0 (const Real &h_ratio, const Real &point_i) const |
| Real | W0 (const Real &h_ratio, const Vec2d &point_i) const |
| Real | W0 (const Real &h_ratio, const Vec3d &point_i) const |
| Real | dW (const Real &h_ratio, const Real &r_ij, const Real &displacement) const |
| Real | dW (const Real &h_ratio, const Real &r_ij, const Vec2d &displacement) const |
| Real | dW (const Real &h_ratio, const Real &r_ij, const Vec3d &displacement) const |
| Real | d2W (const Real &h_ratio, const Real &r_ij, const Real &displacement) const |
| Real | d2W (const Real &h_ratio, const Real &r_ij, const Vec2d &displacement) const |
| Real | d2W (const Real &h_ratio, const Real &r_ij, const Vec3d &displacement) const |
| void | reduceOnce () |
| void | reduceTwice () |
Protected Types | |
| typedef std::function< Real(const Real &)> | FactorFunctor |
Protected Attributes | |
| const std::string | kernel_name_ |
| Real | h_ |
| Real | inv_h_ |
| Real | cutoff_radius_ref_ |
| Real | factor_W_1D_ |
| Real | factor_W_2D_ |
| Real | factor_W_3D_ |
| Real | factor_dW_1D_ |
| Real | factor_dW_2D_ |
| Real | factor_dW_3D_ |
| Real | factor_d2W_1D_ |
| Real | factor_d2W_2D_ |
| Real | factor_d2W_3D_ |
| FactorFunctor | h_factor_W_1D_ |
| FactorFunctor | h_factor_W_2D_ |
| FactorFunctor | h_factor_W_3D_ |
| FactorFunctor | h_factor_dW_1D_ |
| FactorFunctor | h_factor_dW_2D_ |
| FactorFunctor | h_factor_dW_3D_ |
| FactorFunctor | h_factor_d2W_1D_ |
| FactorFunctor | h_factor_d2W_2D_ |
| FactorFunctor | h_factor_d2W_3D_ |
Abstract base class of a general SPH kernel function which is a smoothed Dirac delta function, a kernel function is radial symmetric, and has a scaling factor. Based on difference data type in 2d or 3d buildings, the kernel is defined for 2 and 3 dimensions. The kernel gives value one at the origin. The naming of kernel function follows the stand SPH literature. Currently, only constant smoothing length is applied. Basically, one can assign different kernel for different particle interactions.
Kernel Laguerre Gauss.
Kernel Cubic B_Spline.
|
protected |
Functor for variable smoothing length.
|
explicit |
empty initialization in constructor, initialization will be carried out later.
|
virtual |
Calculates the kernel second order derivation for the given distance of two particles
| Real SPH::Kernel::d2W | ( | const Real & | h_ratio, |
| const Real & | r_ij, | ||
| const Real & | displacement | ||
| ) | const |
Calculates the kernel second order derivation for the given distance of two particles
|
pure virtual |
this value could be use to calculate the value of d2W they are realized in specific kernel implementations
Implemented in SPH::KernelCubicBSpline, SPH::KernelHyperbolic, SPH::KernelLaguerreGauss, SPH::KernelQuadratic, SPH::KernelWendlandC2, and SPH::KernelTabulated< KernelType >.
|
virtual |
Calculates the kernel derivation for the given distance of two particles
| Real SPH::Kernel::dW | ( | const Real & | h_ratio, |
| const Real & | r_ij, | ||
| const Real & | displacement | ||
| ) | const |
Calculates the kernel derivation for the given distance of two particles
|
pure virtual |
this value could be use to calculate the value of dW they are realized in specific kernel implementations
Implemented in SPH::KernelCubicBSpline, SPH::KernelHyperbolic, SPH::KernelLaguerreGauss, SPH::KernelQuadratic, SPH::KernelWendlandC2, and SPH::KernelTabulated< KernelType >.
|
inlinevirtual |
non-dimensional size of the kernel, generally 2.0
Reimplemented in SPH::KernelTabulated< KernelType >.
| void SPH::Kernel::reduceTwice | ( | ) |
reduce for thin structures or films
|
virtual |
Calculates the kernel value for the given displacement of two particles r_ij pointing from particle j to particle i
|
inlinevirtual |
Calculates the kernel value at the origin
| Real SPH::Kernel::W0 | ( | const Real & | h_ratio, |
| const Real & | point_i | ||
| ) | const |
Calculates the kernel value at the origin
|
pure virtual |
this value could be use to calculate the value of W they are realized in specific kernel implementations
Implemented in SPH::KernelCubicBSpline, SPH::KernelHyperbolic, SPH::KernelLaguerreGauss, SPH::KernelQuadratic, SPH::KernelWendlandC2, and SPH::KernelTabulated< KernelType >.
|
protected |
Auxiliary factors for the second order derivative of kernel function
|
protected |
Auxiliary factors for the derivative of kernel function
|
protected |
reference cut off radius Normalization factors for the kernel function
|
protected |
reference smoothing length and its inverse


The Open MV camera is the brain for the Camera Backpack that allows you to integrate image processing and machine vision capabilities of the Open MV camera to LEGO SPIKE Prime.
The Pyboard is the brain for this backpack. It allows you to connect Grove sensors to LEGO SPIKE Prime to easily plug in different types of sensors (I2C, analog, digital) to the Grove Backpack.
With the Pyboard Backpack, you can connect a Pyboard to LEGO SPIKE Prime. You can use this to prototype circuits, add in sensors and drive servos. You can also connect the SPIKE Prime to the WiFi.
The Pyboard is the brain for this backpack. It allows you to connect Grove sensors to LEGO SPIKE Prime to easily plug in different types of sensors (I2C, analog, digital) to the Grove Backpack.
With the Micro:bit Backpack, you can connect a Micro:bit to LEGO SPIKE Prime. You can integrate all the capabilities of a Microbit to the SPIKE Prime. You can also communicate between two Microbits using radio communication.
The Universal connector is basically a wired connector that converts the SPIKE Prime connectors to generic male header pins. This backpack is super useful if you are planning to make your own backpacks for new microcontrollers.


ALL PICTURES GH
HOME
ADMINISTRATION
ABOUT US
GALLARY
CONTACT US
Google Search:
PICTURES OF HOUSES AND MANSIONS
Hmm
Copyright (c) Ninoo 2021. All rights reserved.


{{::$ctrl.capitalizedKey}} last refreshed {{ $ctrl.getRefreshTime() | timestamp }} refreshing...
If you're not finding a {{::$ctrl.depluralizedKey}} that was recently added, click here to refresh the list.