Designing a Web Frontend Development Workflow
In the the web 'you can do anything' extends to how you develop too. With every possible path open, most developers, me included, lack direction - at least initially. To bring order to the mess I will document considerations and approaches to design a development workflow that makes sense. It will be opinionated, with probably changing opinions along the way.
Firstly I will outline design goals, then tools at hand to finally propose a solution approach.
In a nutshell: there are plenty of options.
One interesting finding: Sam Saccone did research what overhead es6 a.k.a es2015 has over current es5. TypeScript (using browserify) performed quite well. This makes it a clear candidate, especially when looking at AngularJS 2
Next up: Baby steps
Firstly I will outline design goals, then tools at hand to finally propose a solution approach.
Design Goals
With the outcome in mind it becomes easier to discover the steps. The design golas don't have equal weight and depending on your preferences you might add or remove some of them- Designed for the professional
The flow needs to make life easier when you know what you are doing. It doesn't need to try to hide any complexity away. It shall take the dull parts away from the developer, so (s)he can focus on functionality and code - Easy to get started
Some scaffolding shall allow the developer to have an instant framework in place that can be modified, adjusted and extended. That might be a scaffolding tool, a clonable project or a zip file - Convention over configuration
A team member or a new maintainer needs to be able to switch between different projects and 'feel at home' in all of them. This requires (directory) structures, procedural steps and conventions to be universal. A simple example: how do you start your application locally? Will it benpm start
orgulp serve
orgrunt serve
ornodemon
or ? - Suitable for team development
Both the product code and the build script need to be modular. When one developer is adding a route and the needed functionality for module A, it must not conflict with code another developer writes for module B. This rules out central routing files, manual addition of css and js files - Structured by function, not code type
A lot of the example out there put templates in on directory, controllers in another and directives yet into another. A better way is to group them by module, so files live together in a single location (Strongly influenced by a style guide) - Suitable for build automation
Strongly influenced by Bluemix Build & Deploy I grew fond of: check in code into the respective branch (using git-flow) and magically the running version appears on the dev, uat or production site. When using a Jenkins based approach that means that the build script needs to be self contained (short of having to install node/npm) and can't rely on tools in the global path - React to changes
A no-brainer: when editing a file, be it in an editor or an ide, the browser needs to reload the UI. Depending on the file (e.g. less or typescript) a compile step needs to happen. Bonus track: newly appearing files are handled too - One touch extensibility
When creating a new module or adding a new dependency there must not be a need of a "secondary" action like adding the JS or CSS definition to the index.html or manually adding a central route file to make that known - Testable
The build flow needs to have provisions to run unit tests, integration tests, code coverage reports, cshint, jslint, trace-analysis etc. Code that "oh it does work" isn't enough. Code needs to pass tests and style conventions. The tests need to be able to run in the build automation too - Extensible and maintainable
Basing a workflow on a looooong build script turns easily into a maintenance task from hell. A collection of chainable tasks/modules/files can keep that in check - Minimalistic (on the output)
Keep the network out of the user experience. A good workflow minimizes both the number of calls as well as the size of http transmission. While in development all modules need to be nicely separated, in production I want as little as possible css, html and js files. So once the UI is loaded any calls on the network are limited to application data and not application logic or layout
Tools at hand
There are quite some candidates: gulp, grunt, bower, bigrig, postman, yeoman, browserify, Webpack, Testling and many others. Some advocate npm scripts to be sufficient.In a nutshell: there are plenty of options.
One interesting finding: Sam Saccone did research what overhead es6 a.k.a es2015 has over current es5. TypeScript (using browserify) performed quite well. This makes it a clear candidate, especially when looking at AngularJS 2
Next up: Baby steps
Posted by Stephan H Wissel on 19 February 2016 | Comments (0) | categories: JavaScript Software WebDevelopment


Have a themed wedding and need unique decorations? Want to make your friends feel appreciated with a custom tumbler? We can help! Click on the themes below to get started.
After choosing a theme below you can pick from pre-made items, speak with our designers for custom designs, or join a class to make the item yourself!
Wheither it is being mailed, custom created, or made by you; We make sure everything is ready on time for your perfect day and will go out of our way to do so.
My daughter Becca was born and I started to get into the world of crafting!
I got married to the love of my life and uncovered my gift of creating unique decoration and flower arrangments.
Started the facebook page, helping brides, and creating one of a kind pieces!
Made it easier to make orders and show what we can do for you!
Lead Designer/Creator
Lead Assisstant
Photographer
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aut eaque, laboriosam veritatis, quos non quis ad perspiciatis, totam corporis ea, alias ut unde.


Profile
| S/N | Issue | Date Reported | Location | Status | Edit | Delete |
|---|---|---|---|---|---|---|
| 1 | Poor waste management and disposal | 21-11-2018 11:30am | 23 James Street, Surulere | Resolved | Edit | |
| 2 | Collapse of bridge | 21-11-2018 09:15am | 21 Ayo Street, Surulere | Investigated | Edit | |
| 3 | Containers parked on the highway causing traffic gridlock | 24-11-2018 03:00pm | 23 Adelabu Street, Surulere | Rejected | Edit | |
| 4 | Blocked drainage systems | 23-11-2018 10:00am | 19 James Street, Yaba | Drafted | Edit | |
| 5 | Power outage for 2 over weeks | 25-11-2018 11:00am | 23 John Street, Surulere | Resolved | Edit | |
| 6 | Rigging at the polling unit | 22-11-2018 04:00pm | 10 Kunle Street, Surulere | Investigated | Edit | |
| 7 | Police extortion at check point | 26-11-2018 02:20pm | 5 Chris Street, Surulere | Resolved | Edit | |
| 8 | Pipeline leakage | 23-11-2018 12:40pm | 203 Niniola Street, Surulere | Resolved | Edit |
Delete Report
X


Live in a converted four-bedroom water tower with a balcony and observatory - for less than £1million
by Jake FoxfordCan you see yourself living in this beautiful seven-storey water tower in the heart of Suffolk?
Situated north of the village of Melton, this seven-storey Victorian wonder was converted from its original purpose to make a luxurious home and living space - and is on the market for £900,000.
Views stretch as far as the River Deben at the top, the bottom two floors are built around the base of the tower, with a large kitchen-come-breakfast room, sitting room, reception hall and utility room all surrounding a unique dining room in the centre of the building.
The kitchen is more than 20ft long, with a range cooker and slate flooring, with a rustic feeling flowing through the house thanks to the use of exposed brickwork and floorboards.
The second floor has a huge master bedroom and en-suite, along with two other bedrooms and a family bathroom.
Ascending the stairway, you reach the first of five floors in the water tower itself which allows access to the flat roof.
Above that is a series of small landings with a bathroom, a bedroom, a study and lastly an observatory on the top floor.
The tower itself, with the top tow floors full of flexible space, could be a unique annex and separate space for house guests.
Even better, the home comes with off-road parking.
For those that could bear to leave this beautiful home, commuters are just a mile from Melton train station and near to the A12.
Contact Fenn Wright on 01394 821 066 to find out more.


Laundry Amanah
Laundry Amanah
Welcome!
Sign in by entering the information below
Remember Me
Forgot password?
Remember Me
Forgot password?
LOGIN
Don't have account? Create one here.


Kentucky pounds Vanderbilt to keep bowl hopes alive
by CHIP CIRILLONASHVILLE, Tenn. (AP) - Mark Stoops wasn’t sure how his team would respond after suffering a disappointing loss to Tennessee the previous week.
He found out Saturday.
Kentucky rushed for a season-high 401 yards and kept its bowl hopes alive with a 38-14 win over Vanderbilt.
 “Sometimes that can linger. It did not this week as you can tell.”
Lynn Bowden and Chris Rodriguez both rushed for over 100 yards for the Wildcats (5-5, 3-5 Southeastern Conference).
Rodriguez led the way, rushing for 129 yards and two touchdowns. Bowden, in his fifth game at quarterback since moving over form wide receiver, added 110 yards rushing and one TD.
“It’s just confidence in your teammates and pushing to get to the end zone,” Bowden said. “Once I see the end zone and once my teammates see the end zone, we try to get to the end zone as fast as we can.”
Kavosiey Smoke rushed for 95 yards and one TD for the Wildcats in a matchup between two teams in the bottom of the SEC’s Eastern Division.
The Wildcats scored 35 consecutive points after falling behind by 11 early in the game.
It was the largest margin of victory in the series since 2001.
“This is a game of momentum and I thought we created some early,” Commodores coach Derek Mason said. “But today we just got out-physicaled on both sides of the ball up front and we lost the line of scrimmage. Didn’t tackle very well. I thought they ran through tackles, through arm tackles and just extended drives and plays.”
Kentucky rambled for a season-high 528 yards in total offense and nearly doubled Vanderbilt in time of possession.
Vanderbilt (2-8, 1-6) scored two touchdowns in 45 seconds to take a 14-3 lead in the first quarter.
Ke’Shawn Vaughn scored on a 5-yard run with 5:21 left in the first quarter and two plays from scrimmage later cornerback Allan George raced to the end zone on a 67-yard fumble return to extend the Commodores’ early lead.
“It would be easy for the guys to panic if they didn’t have confidence in what we were going to do because, let’s face it, we are methodical right now and there aren’t a ton of explosive plays,” Stoops said. “When you go down 14-3 if you’re not a team that has confidence in what we’re doing, you could flinch right there because you know points have been hard, but that wasn’t the case.”
Kentucky’s methodical offense marched down the field for 30 first downs and Vanderbilt mustered only 13.
THE TAKEAWAY
Kentucky: The Wildcats need a home win over Tennessee-Martin or Louisville in their last two games to become bowl eligible for the fourth straight season.
Vanderbilt: The loss puts more pressure on coach Derek Mason, whose only wins this season were against Missouri and Northern Illinois.
GROWING UP
Rodriguez and Smoke, both redshirt freshmen, made impressive strides running the ball. “I noticed it today: a little bit of growth,” Stoops said. “Some of the runs they made today, I haven’t necessarily always seen. You’ve seen flashes, you’ve seen them do some really good things, but today I saw a couple runs they kind of took over - pretty determined, tough runs. And also they showed some really athletic plays.”
NUMBERS GAME
Vanderbilt linebacker Dimitri Moore had a career-high 12 tackles.
Vaughn moved into eighth in Commodores career rushing with over 2,100 yards.
UP NEXT
Kentucky: The Wildcats host Tennessee-Martin, an Ohio Valley Conference team, on Saturday.
Vanderbilt: The Commodores host East Tennessee State in their home finale Saturday.
More AP college football: https://apnews.com/tag/Collegefootball and http://www.twitter.com/AP_Top25
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


React Delete Row
A Reactjs TypeScript component for rendering a table row with a delete button and fade effect.


{% extends "base.html" %} {% block title %}{{ mesocore.name }}{% endblock %} {% block outermain %}
I work for people who want a small, easy to use Django based framework, with easy to customise code, on top of which to build a personal web site.
My interests include Python, Django (because it's awesome) and Bootstrap.
I live on the Internet, at GitHub. Feel free to clone me and improve me there.


# The Ubuntu handbook - 22/05/21
Sometimes Linux for new users can seem uninviting, daunting and confusing. It looks really complicated from an outsiders perspective and so people may feel put off by it, however I am here to attempt to make Linux seem less daunting. I recommend that you use Ubuntu if you wish to follow this guide since the guide was written with new Ubuntu users in mind.
## What is Linux?
The Linux Kernel, also known simply as "Linux", is an operating system kernel written in C. Every Linux-based operating system (known as a distribution) uses the Linux kernel, as well as a package manager, within its system. The Linux Kernel itself, as well as many distributions are Free and Open Source, meaning that anyone can contribute to the code, modify it, redistribute it and use it for free. There are thousands of different Linux distributions, which typically take other Free, Open Source Software components to create a fully functioning operating system. This can include applications, package managers and Desktop Environments.
## What makes a Linux distribution?
Many different things can come bundled within a Linux Distribution, such as software, Desktop Environments, an installer, package managers and of course, the Linux kernel.
Typically a version of the Linux Kernel, as well as a package manager is enough to be classed as a Linux distribution. Depending on the Linux distribution, they may lack an installer, or come with programs for you to install the system yourself (such as Arch or Gentoo), whereas other Linux distributions may come bundled with an installer and a Desktop Environment (such as Ubuntu, Fedora or Manjaro).
## What is a Desktop Environment?
A Desktop Environment contains an array of software pre-installed, such as themes, icons, other UI elements, applications, APIs and more to help give a full and consistent desktop experience on Linux. It provides a graphical desktop for you to be able to do your tasks on your computer. Each Desktop Environment has a distinct look and feel, with different methods of customisation. Some well known desktop environments are GNOME, KDE, XFCE, LXQt, Budgie and Pantheon.
- This guide will typically focus on GNOME, as it is written for Ubuntu and Ubuntu-based systems.
## The Ubuntu Installer
The installer for Ubuntu is fairly straight-foward. It will typically present you with a series of options, where you will choose some simple things to help with getting started such as: Whether you want a minimal or full installation, keyboard layout, username and password, timezone and which drive you want to install Ubuntu on.
-
If you are new to Linux I highly recommend using third-party software, as you will likely require non-free drivers for your computer to operate smoothly.
-
After checking this button and pressing continue, I recommend you consistently check the status in the top-right hand corner until your WiFi button has appeared, then promptly connect. This should avoid any installation issues due to a lack of internet.
## How to install/remove/update applications via APT
APT is the default package manager for Ubuntu. Updates, app installations and app deletions will typically be handled through apt (or a third party package manager if you choose, such as Flatpak).
- How to search for a package in the repositories:
apt search [package-name]
- This will search for a package with this name. Example: apt search firefox
- How to install a package:
sudo apt install [package-name]
- This will install an application with this name. Example sudo apt install firefox
- How to uninstall a package:
sudo apt remove [package-name]
- This will remove an application with this name. Example sudo apt remove firefox
-
Packages come with something called dependencies. Normally during installation of a package, dependencies are installed along with an application, however when you remove a package, you need to run an additonal command,
sudo apt autoremove
, to remove dependencies associated with that package. -
How to update your repositories: (Important side-note, when you are ever installing applications, or updating your updates, you will need to update your repositories first so that you get the latest updates from them.)
sudo apt update
- This will update your repositories
- How to upgrade packages:
sudo apt upgrade
- This will update any packages which require updates.
There are many wonderful commands which we have not covered here, however I recommend using a search engine such as DuckDuckGo or Google to find your answers.
- I also recommend trying "apt moo"
## How to add Flatpak, and the Flathub repository onto your system
Flatpak is a package-manager which works across almost every Linux Distribution, and sandboxes its applications, which helps aid security as it limits the permissions that applications have on your desktop. Flatpak primarily hold third-party software in their repositories, whereas Ubuntu repositories will not. Steam, Minecraft, Spotify and Discord are all available from the Flathub repository. Flathub is the best place to get Flatpak apps.
- Install Flatpak
sudo apt install flatpak
- Installs flatpak.
- Add the Flathub repository
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
- Adds the Flathub repository to Flatpak.
## How to install/remove/update Flatpak applications
Flatpak commands to install/remove/update software is similar to that of APT.
- How to search for applications:
flatpak search [app-name]
- This will search for applications based on the app name you searched. Alternatively you can use this website.
- How to install applications:
flatpak install [app-name]
- This will install an application from Flatpak.
- How to remove applications:
flatpak remove [app-name]
- This will remove an application that was installed from Flatpak.
- How to update applications:
flatpak update
- This will update applications from Flatpak.
## Installing the default GNOME Desktop Environment
By default Ubuntu comes with a modified version of the GNOME Desktop Environment, however many people prefer the standard GNOME desktop environment as it looks more modern and fluid. To install this desktop environment you will need to enter into your terminal:
sudo apt install gnome-session && gnome-tweaks
This will install the gnome-session, as well as the "Tweak tool", which allows you to change between light and dark theme and enable/disable extensions].
Now after the installation you will need to reboot, then click on your name on the login manager.
- Before entering your password click on the gear icon in the bottom right corner and select "GNOME"
This will now install the default GNOME session on Ubuntu!
## Conclusion
Despite being complicated at first, I personally feel like Linux - while initially seeming daunting - can be a very friendly and inviting operating system if newcomers are given the right guidance. This quick-start guide was intended to help people learn how to use Linux by starting them on a fairly simple Ubuntu installation, and teaching them how to install, remove, update packages as well as install desktop environments.
# Sources
# Edits
- Released post - (22/05/21)


Can Brain Sensing Devices Really Help you Meditate?
There must be an app for that!
Zenpra 2nd February 2015 0 Comments
Meditation meets technology
Have you ever wondered what is happening to your brain while you meditate? Brain sensing technology has become relatively cheap allowing regular people to dive into their brain data. This has allowed people to create apps that can actually tell you if you are in a focused and meditative state by analyzing your brain waves.
 (Funky names I know lol) Who could have imagined that the same devices that were used in hospitals and research clinics can now be used at home? Wouldn’t it be great if we could reduce stress, improve our focus, and creativity? Brain sensing technologies allow us to actually train our brains and see the results of our efforts.
There has been a recent surge in devices that measure bio data. For example your Fitbit can see how many steps you ran and your sleep cycle. Technology has made it easier for us to track our health and improve it. Now with the advancements of brain sensing technology you will soon be able to manage the health and vitality of your brain. All these new technologies give us the power to be in control of our health.
How does it work?
Muse is a headband and measures the electrical activity of the brain by passive sensors. It then takes the EEG data and interprets if you are in a calm or active state. It looks at the pattern of your brain signals and sees if there is any change in alpha, beta, gamma, or theta waves. Alpha waves are emitted when you are in a relaxed state while beta waves are emitted during active thinking and problem solving. You can read more about brain waves here.
Your brain emits detectable electrical signals based on neural activity. It takes the sum of the neural activity which could be 50,000 neurons! When neurons fire in a coordinated pattern they emit voltage fluctuations at different frequencies. Such states include Alpha Beta and Theta waves.  You can see why it takes sophisticated sensors and algorithms to make this possible.
Meditate with real time feedback
Muse pairs with an App called Calm. This app gets the raw EEG data from the headset and can tell you your brain state in real time. So if you lose focus during meditation it can alert you. It is like having a meditation coach right by your side.
The calm app has exercises that guide you to become more focused. For example, there is an exercise that helps you focus on your breath. As you do the exercises you hear pleasant sounds such as chimes and ocean waves. The cool thing of the app is that when your brain activity becomes less focused the sound actually changes to be more hectic. If the sounds are peaceful then your mind is calm and focused. If the sounds are louder than normal that means your mind is distracted. The changing music gives you feedback on how well you are focused. You will be able to train yourself to meditate by trying to keep the music pleasant.
It can help you with meditations where you want to be focused. However, it does not help with body scanning or other forms of meditations where you have to actively think or visualize. The app will interpret this type of thinking as activity and will say that you are not in a focused state. Maybe one day they could make the technology better.
The Calm app allows you to see in real time the changes in your brain state. The screenshot shows different brain states right on your phone!
How can it help you meditate?
Wouldn’t it be great to know what a meditative state actually feels like? People constantly ask how they can know if they are meditating right. For some it is discouraging not being able to see immediate results and knowing if they are on the right track. With this device you are able to see how well you are focused and it gives you something to work towards and improve. After some practice you will be able to distinguish what a relaxed and meditative state feels like. We cannot grow in life if we do not get feedback on how we are doing. The brain sensing technologies allow for you to get real-time feedback on what your current brain state is.
This technology can help you reach a meditative state much quicker by telling you when you reached a calm state. This allows you to find out what technique works best for you to reach that state easily. So after weeks of use you might notice that it is easier for you to reach a meditative state. This helps you train yourself to reduce stress and stay calm even when you are not using the headset.
You can also make meditation into a game! Now this might not be for everyone but it can help people get started with meditation.  The Calm app keeps score of your session by seeing how long you are in a calm state. It helps motivate people to continue their meditation practice and improve their results. You can also challenge your friends!
The key is to find what works for you. There isn’t going to be one type of meditation technique that is right for everyone. If you think like this is cool technology and you can’t wait to gamify your meditation check out Muse here.
What can you imagine for the future?
What are the possibilities with this new technology? I could imagine it being used while studying or during surgery where extreme focus and attention is needed. There are also other uses for the muse such as controlling a toy car with your mind and creating music from your thoughts.
I feel this is just the beginning of utilizing technology to explore deeper into ourselves. We have explored different planets and the depths of the ocean, but we have not taken the time to understand what is in-between our heads. The best part is that you do not need fancy technology, you can start exploring right now by meditating.


while. While will execute code while the conditional is true. While the tv is off, I will execute code!
until. Until the conditional is false, the code will continue to execute. Until midnight, I will continue to do work.
break. Sometimes we all need to take a break. Break will terminate the internal loop. Think of it as a little break before your computer goes to the next code within the code block.
next. Keep walking! Next will go to the next iteration, jumping to the most internal loop.
next. Keep walking! Next will go to the next iteration, jumping to the most internal loop.
retry. Can I get another chance? This will appear typically in the block of code near the end, and can be considered the rescue clause. Arguments will be re-evaluated.
June 29, 2014


[§435C-7] Appeals and judicial review. Any applicant to the plan, any person insured pursuant to this chapter, or their representatives, or any affected insurer, may appeal to the insurance commissioner within thirty days after any ruling, action or decision by or on behalf of the plan, with respect to those items the plan of operation defines as appealable matters.
All orders of the insurance commissioner made pursuant to this chapter shall be subject to judicial review as provided in section 431:14-118. [L 1975, c 161, pt of §1]
Revision Note
Section "431:14-118" substituted for "431-705".


8879728598
Complete tutorial on using the SplitPay Mobile Web Application
Sign Out of your account
Payments
Splits
Settings


[§432C-7] Judicial review. Any final order or action by the commissioner may be subject to judicial review by the circuit court. [L 1998, c 260, pt of §2]


Small group of Cherry fans protest his firing at Rogers HQ
One sign at the Toronto rally: ‘Rogers cancels Don, we cancel Rogers’
by The Canadian PressAbout 20 people gathered peacefully outside Rogers headquarters on Wednesday afternoon to protest the firing of hockey commentator Don Cherry.
Some Cherry supporters stood silently on the sidewalk with Canadian flags while others raised placards in the air. One sign said ‘Cancel culture is wrong,’ while another said, ‘Rogers cancels Don, we cancel Rogers.’
There were just as many media members as protesters on the downtown sidewalk outside the building.
The event was organized in the aftermath of Sportsnet’s decision to fire Cherry for his comments on “Coach’s Corner” during last Saturday’s “Hockey Night in Canada.” Many felt Cherry was critical of immigrants for not wearing poppies. Cherry has insisted he was not criticizing immigrants.
READ MORE: Petition to ‘bring back Don Cherry’ goes viral after immigrant poppy rant
During the protest, some motorists honked in support of the effort. A couple of police cruisers sat across the road.
The Canadian Press


Please join us in congratulating Deborah Estrin on being selected as a 2018 MacArthur Foundation Fellow for her groundbreaking work and research
in small data.
We are excited to release OpenRec - a modular framework designed for researchers and practitioners to readily adapt and extend state-of-the-art
recommendation algorithms. Checkout our website and #wsdm18 paper.
The Feinstein Institute for Medical Research, Cornell Tech, and Sage Bionetworks announced today the launch of a pioneering study to examine the
use of a smartphone application to identify and understand impulsivity in daily life. The team intends to develop additional apps using study data with the goal of
providing support to those looking to change impulsive behaviors and better their ability to resist unhealthy temptations.
Leveraging Post-click Feedback for Content Recommendations. [PDF]
WEN, H., YANG, L., ESTRIN, D. In Thirteenth ACM Conference on Recommender Systems (RecSys’19), September 2019
More than Just Words: Modeling Non-textual Characteristics of Podcasts. [PDF]
YANG, L., WANG, Y., DUNNE, D. SOBOLEV, M., NAAMAN, M., C., ESTRIN, D. In Twelfth ACM Conference on Web Search and Data Mining (WSDM’19), February 2019
Mobile Health Technologies for Older Adults with Cardiovascular Disease: Current Evidence and Future Directions. [PDF]
SEARCY, R., SUMMAPUND, J., ESTRIN, D., POLLAK, JP, SCHOENTHALER, A., TROXEL, A., DODSON, J.A., Current Geriatrics Reports (2019), January 2019
2018
Understanding User Interactions with Podcast Recommendations Delivered Via Voice.[PDF]
YANG, L., SOBOLEV, M., TSANGOURI, C., ESTRIN, D. In Twelfth ACM Conference on Recommender Systems (RecSys ’18) October 2018
Exploring Recommendations Under User-Controlled Data Filtering.[PDF]
WEN, H., YANG, L., SOBOLEV, M., ESTRIN, D. In Twelfth ACM Conference on Recommender Systems (RecSys ’18) October 2018
Unbiased Offline Recommender Evaluation for Missing-Not-At-Random Implicit Feedback.[PDF]
YANG, L., CUI, Y., XUAN, Y., WANG, C., BELONGIE, S., ESTRIN, D. In Twelfth ACM Conference on Recommender Systems (RecSys ’18) October 2018
An mHealth App for Self-Management of Chronic Lower Back Pain (Limbr): Pilot Study.[PDF]
SELTER, A., TSANGOURI, C., ALI, S., FREED, D., VATCHINSKY, A., KIZER, J., SAHUGUET, A., VOJTA, D., VAD, V., POLLAK, J., ESTRIN, D. JMIR Mhealth Uhealth September 2018
Good Vibrations: Can a Digital Nudge Reduce Digital Overload? [PDF]
OKEKE, F., SOBOLEV, M., Dell, N., ESTRIN, D. International Conference on Human-Computer Interaction with Mobile Devices and Services (MobileHCI 2018). September 2018
Characterizing User Skills from Application Usage Traces with Hierarchical Attention Recurrent Networks.[PDF]
YANG, L., FANG, C., JIN, H., HOFFMAN, M.D., ESTRIN, D. ACM Transactions on Intelligent Systems and Technology (TIST) June 2018
Small Data: Applications and Architecture.[PDF]
HSIEH, C.K., ALQUADDOOMI, F., OKEKE, F., POLLAK, JP, GUNASEKARA, L., ESTRIN, D. Proceedings of the Fourth International Conference on Big Data, Small Data, Linked Data and Open
Data, April 2018.
Towards A Framework for Mobile Behavior Change Research.
OKEKE, F., SOBOLEV, M., ESTRIN, D. In Technology, Mind, and Society: APAScience, Washington DC, USA, April 2018
Ranking Subreddits by Classifier Indistinguishability in the Reddit Corpus.[PDF]
ALQUADDOOMI, F., ESTRIN, D. Proceedings of the Tenth International Conference on Information, Process, and Knowledge Management, March 2018.
OpenRec: A Modular Framework for Extensible Recommendation Algorithms. [PDF]
YANG, L., BAGDASARYAN, E., GRUENSTEIN, J., HSIEH, C., ESTRIN, D. Proceedings of the 11th ACM International Conference on Web Search and Data Mining (WSDM),
Feburary 2018. openrec.ai
2017
Yum-me: A Personalized Nutrient-based Meal Recommender System. [PDF]
YANG, L., HSIEH, C., YANG, H., POLLAK, JP, DELL, N., Belongie, S., COLE, C., ESTRIN, D., ACM Transactions on Information Systems (TOIS), August 2017
2017
Personalizing Software and Web Services by Integrating Unstructured Application Usage Traces. [PDF]
YANG, L., FANG, C., JIN, H., HOFFMAN, M.D., ESTRIN, D. In Proceedings of 26th International World Wide Web Conference (WWW), Perth, Australia, April 2017.
Collaborative Metric Learning. [PDF]
HSIEH, C.H., YANG, L., CUI, Y., LIN, T.Y., BELONGIE, S., ESTRIN, D., In Proceedings of 26th International World Wide Web Conference (WWW), Perth, Australia,
April 2017.
2016
The Pace of Technologic Change: Implications for Digital Health Behavior Intervention Research. [PDF]
PATRICK, K., HEKLER, E.B, ESTRIN, D., MOHR, D.C., RIPER, H., CRANE, D., GODINO, J., RILEY, W.T., American Journal of Preventive Medicine. 2016 Nov; 51(5):816-824.
Internet Scale Research Studies using SDL-RX. [PDF]
KIZER, J., SAHUGUET, A., LAKIN, N., CARROLL, M., POLLAK, JP AND ESTRIN, D. Presented at the Data For Good Exchange, September, 2016.
Your Activities of Daily Living (YADL): An Image-based Survey Technique for Patients with Arthritis. [PDF]
YANG, L., FREED, D., WU, A., WU, J., POLLAK, JP. AND ESTRIN, D. In Proceedings of the 10th International Conference on Pervasive Computing Technologies for Healthcare, Cancun,
Mexico, May 2016.
Leveraging Multi-Modal Sensing for Mobile Health: a Case Review in Chronic Pain. [PDF]
AUNG, M. S. H., ALQUADDOOMI, F., HSIEH, A., RABBI, M., YANG, L., POLLAK, J.P., ESTRIN, D. and CHOUDHURY, T. IEEE Journal of Selected Topics in Signal Processing. 2016 Aug;
10(5): 962-974.
Immersive Recommendation: News and Event Recommendations Using Personal Digital Traces. [PDF]
HSIEH, C.K., YANG, L., WEI, H., NAAMAN, M. AND ESTRIN, D. In Proceedings of the 25th International World Wide Web Conference (WWW), Montréal, Quèbec, Canada,
April 2016.
GroupLink: Group Event Recommendations Using Personal Digital Traces. [PDF]
Wei, H., Hsieh, C., Yang, L., Estrin, D., In the 19th ACM Conference on Computer Supported Cooperative Work and Social Computing (CSCW’16), March 2016
Reassembling Our Digital Selves. [PDF]
ESTRIN, D. AND JUELS, A. Daedalus, 145, 1 , 43-53 (doi: 10.1162/DAED_a_00364). January 2016
2015 and prior
Smartphone Data in Rheumatoid Arthritis - What Do Rheumatologists Want?[PDF]
SAY, P.R., STEIN, D., ANCKER J.S., HSIEH A, POLLAK JP. AND ESTRIN, D. In Proceedings of the AMIA Annual Symposium, San Francisco, CA, November 2015.
PlateClick: Bootstrapping Food Preferences Through an Adaptive Visual Interface. [PDF]
YANG, L., CUI, Y., ZHANG, F., POLLAK, JP., BELONGIE, S. AND ESTRIN, D. In Proceedings of the 24th ACM International Conference on Information and Knowledge Management (CIKM),
Melbourne, Australia, October 2015
Beyond Classification: Latent User Interests Profiling from Visual Contents Analysis. [PDF]
YANG, L., HSIEH, C. AND ESTRIN, D., In Proceedings of Data Mining Workshop (ICDMW), IEEE International Conference. November 2015
Pushcart: Supporting and Scaling Nutritionist-Client Relationships. [PDF]
BAUM, A., CARROLL, M., ESTRIN, D., GUNASEKARA, L. AND POLLAK, JP. In Proceedings of CSCW 2015: Workshop on Moving Beyond e-Health and the Quantified Self, Vancouver, Canada,
March, 2015, CSCW 2015.
Small data, where n = me. [PDF]
ESTRIN, D. CACM, Viewpoint Column, Communications of the ACM, 57, 4, 32-34. April 2014
The Email Analysis Framework: Aiding the analysis of personal natural language texts. [PDF]
ALQUADDOOMI, F., KETCHAM, C. and ESTRIN, D. In Workshop on Linking The Quantified Self (LinkQS), Santiago, Chile, September 2014
Lifestreams: A Modular Sense-making Toolset for Identifying Important Patterns from Everyday Life. [PDF]
HSIEH, C.K., TANGMURARUNKIT, H., ALQUADDOOMI, F., JENKINS, J., KANG, J., KETCHAM, C., LONGSTAFF, B., SELSKY, J., SWENDEMAN, D., ESTRIN, D. AND RAMANATHAN, N. In Proceedings of
the 11th ACM Conference on Embedded Networked Sensor Systems (SenSys), Rome Italy, November 2013.
ResearchStack is an SDK and UX framework for building research study apps on Android.
It is designed from the ground up to meet the requirements of most scientific research, including capturing participant consent, extensible input tasks, and the
security and privacy needs necessary for IRB approval.
Is it similar to Apple's ResearchKit(TM)?
Yes, an overarching goal of ResearchStack is to help developers and researchers with existing apps on iOS more easily adapt those apps for Android.
Though the correspondence of features between the two SDKs isn’t one-to-one, the two SDKs will offer enough shared functionality and a common framework and naming
scheme to greatly speed up adaptation of ResearchKit apps to Android (and ResearchStack apps to iOS) and the procedural aspects of running a study on a new platform
(such as IRB approval and secure connectivity with a data collection backend).
What features are available?
Researchers and developers can leverage ResearchStack to build a basic Android app without having extensive knowledge of the Android platform. Using JSON and HTML files,
a simple app can be built that will include the onboarding flow (Study Overview/Consent/Sign Up) and an Activities screen with scheduled tasks for the user. Graphing
libraries facilitate data visualization. Researchers will also be able to reuse existing ResearchKit AppCore resources, with some minor changes.
ResearchStack also has tools to allow easy on-disk encryption and strives to be extensible so that researchers can implement or modify screens they need.
Powered by Apple’s ResearchKit and Android’s ResearchStack application development frameworks, the DMT uses the smartphone to understand
individuals who have trouble controlling their impulses, particularly with regard to unhealthy behaviors, such as overeating or drinking alcohol, in order to help them
regain control when they need it most. The app consists of surveys, game-like tasks and passive sensor data such as accelerometer, aiming to understand how individuals
regulate their behavior in different settings and at different times of the day. The ultimate goal is that the DMT will eventually lead to non-invasive mobile
interventions to identify and help those at greatest risk for impulsive responding and enhance temptation resilience before serious problems can occur. This is
collaborative work with Northwell Health.
Beehive
The study of human behavior currently faces three major challenges: recruiting participants, conducting frequent and longitudinal data
collection, and utilizing smart and adaptive interventions. We developed a novel system, Beehive, to tackle the intersection of these challenges. Beehive is a research
platform developed for the study of human behavior by leveraging the power of mobile ubiquitous technology. Using this platform, researchers will be able to recruit
more participants, collect objective data and apply smart interventions to improve daily life, in the wild. Beehive seamlessly integrates with smartphones making it
easy for participants to sign up for and participate in a study by using the mobile phone that is already in their pockets. To learn more about ongoing experiments with
Beehive, contact the researchers involved.
Immersive Recommendation
Our daily lives are mediated by a myriad of digital services. As a result we continuously generating digital traces that can be used to chronicle, characterize, and
influence our behaviors and preferences. Digital services from search to e-commerce and entertainment leverage these data to target advertising, personalize
recommendations and adapt services.
In our research we explore a personalization approach in which individuals actively harness their own digital traces to reframe personalization. We focus in particular
on algorithms, systems, and rich user interactions that make personalization immersive, through the use of diverse personal data sources, and intentional, through
transparency and user-modeling input that allows the end user to amplify their aspirational-behaviors relative to historically-observed behavior.
Ancile
People today generate a tremendous amount of data as a byproduct of their daily activities through the use of mobile phones, wearable devices, and online services. The
availability of this “microscale” data creates exciting opportunities for solving complex planning problems (e.g.,using location data to decide where to place a new
café on campus to best serve the Cornell community) but it also raises serious concerns about security and privacy.
The Ancile Project is developing a new software platform for managing microscale data in a privacy-sensitive manner. This platform will enable researchers to investigate
how microscale data can be used to solve planning problems and improve resource allocation. Results from this research could provide deeper insights about the aggregate
behavior of the Cornell community and could help improve use of facilities, dining, and transportation services. The first set of Ancile-based research studies will be
conducted on the new Cornell Tech campus in Roosevelt Island. To learn more, contact the researchers involved.
Retrospective Data Learning
Retrospective data learning mines an person’s digital traces generated through online interactions for clues to their past. Service providers such as Google and Amazon
implicitly record users’ location, search queries, email, or calendar. By analyzing these retrospective data, we aim to learn about temporal patterns and deviations
that reveal individual behavior changes across many contexts.
One example application is to create new digital biomarkers for health and health behavior from patients’ retrospective data. We are working to demonstrate the use of
personal historical digital traces as a source of signal for identifying severity and changes in state of a disease, and response to treatment, with ultimate use in
treatment management.
Presently, we have built a tool for research study participants to access their individual search and location history from Google Takeout and filter it for inclusion in
IRB approved research; with the utmost care taken to provide security and privacy for the patient. We work with clinical collaborators to recruit patients diagnosed
with conditions of interest, collect data via takeout, then analyze search patterns and location trajectories. We are exploring how these data reveal personal symptom
development and variability in daily mobility by comparing patients’ historical data with their clinical history to develop a detection algorithm for various aspects of
disease state and behavior.
Pushcart is an effortless and compatible passive data collection tool that provides objective, high frequency, household-level data on food consumption and nutrition.
Pushcart can serve as a proxy for variety of nutritional metrics on the household level including: total calories consumed and division to different food groups (e.g.
fruits, vegetables, sugar) continuously on a weekly basis. Pushcart provides an objective measure of nutritional habits by analyzing online shopping email receipts from
grocery stores (e.g. Amazon) and prepared-food delivery services (e.g. Seamless).
Pushcart is plug-and-play compatible with any service that generates email receipts. There is no single technology platform or grocery service to which Pushcart is tied
and the service provider does not have to participate. The consumer unilaterally signs up for Pushcart by permitting all emailed receipts to be automatically sent to
the platform for processing.
LIMBR is a suite of applications that we have developed based on the innovations developed under this funding for effective pain reporting, and self-directed management
of medication and exercise tracking LIMBR is comprised of tools to: (i) facilitate self reporting of pain, medication, and affect, (ii) deliver individually tailored
exercise videos, (iii) provide a platform for one-on-one chatting with a health coach, and (iv) collect data on the participants’ patterns of movement.
We tested LIMBR in a prospective pilot study, in 100 patients with acute or chronic low axial discogenic back pain at the Hospital for Special Surgery. The prevalence
and disability associated with discogenic low back pain are significant and there is a general lack of widely accepted conservative treatments for the condition. A
majority of previous studies that have assessed the efficacy of self-directed exercise based rehabilitation programs did not include comprehensive metrics to confirm
whether participants actually participated in the exercises prescribed. In this pilot study, we aimed to determine whether proxies of compliance with a daily, self
directed rehabilitation program for discogenic low back pain are correlated with participant reported improvements in pain and function.
The specific aim is to explore how mHealth applications and data tracking can promote adherence to self-directed rehab and engagement in low back pain self-management
and improve pain and function. The feasibility of an AVA based mobile interface designed to help patients with chronic low back pain track ADLs, medication, affect and
pain intensity is also evaluated.
Beehive
Beehive is a research platform designed to study human behavior outside of the lab (in the wild) using small data and ubiquitous mobile
technology.
Pushcart
Pushcart is an effortless and compatible passive data collection tool that provides objective, high frequency, household-level data on food
consumption and nutrition.
Limbr
LIMBR is a suite of applications that we have developed based on the innovations developed under this funding for effective pain reporting, and
self-directed management of medication and exercise tracking.
Digital Marshmallow
The Digital Marshmallow Test (DMT) is a mobile app designed to identify, understand and help individuals who have difficulty regulating their behavior.


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.sling.engine.EngineConstants
public class EngineConstants
The CoreConstants
interface provides some symbolic constants
for well known constant strings in Sling. Even though these constants will
never change, it is recommended that applications refer to the symbolic
constants instead of code the strings themselves.
| Field Summary | |
|---|---|
static java.lang.String |
SESSION
The name of the request attribute set by the org.apache.sling.engine.impl.auth.SlingAuthenticator
when authenticating the request user (value is "javax.jcr.Session"). |
static java.lang.String |
SLING_CURRENT_SERVLET_NAME
The name of the request attribute providing the name of the currently executing servlet (value is "sling.core.current.servletName"). |
static java.lang.String |
SLING_HOME
The name of the framework property defining the Sling home directory (value is "sling.home"). |
static java.lang.String |
SLING_HOME_URL
The name of the framework property defining the Sling home directory as an URL (value is "sling.home.url"). |
static java.lang.String |
SLING_SERLVET_NAME
The name of the service registration property of a Servlet registered as a service containing the name of the servlet (value is "sling.core.servletName"). |
| Constructor Summary | |
|---|---|
EngineConstants()
|
| Method Summary |
|---|
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final java.lang.String SLING_HOME
This property is available calling the
BundleContext.getProperty(String)
method.
SLING_HOME_URL
,
Constant Field Valuespublic static final java.lang.String SLING_HOME_URL
The value of this property is assigned the value of
new File(${sling.home}).toURI().toString()
before
resolving the property variables.
This property is available calling the
BundleContext.getProperty(String)
method.
SLING_HOME
,
Constant Field Valuespublic static final java.lang.String SLING_CURRENT_SERVLET_NAME
Servlet.service()
method and reset to any previously
stored value after the service method returns.
public static final java.lang.String SLING_SERLVET_NAME
component.name
property or the service.pid
is used. If none of the three properties is defined, the Servlet is
ignored.
public static final java.lang.String SESSION
org.apache.sling.engine.impl.auth.SlingAuthenticator
when authenticating the request user (value is "javax.jcr.Session").
Existence of this attribute in the request, provided it is a JCR Session,
signals that authentication has already taken place. This may be used
when including through the servlet container.
| Constructor Detail |
|---|
public EngineConstants()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


<%if(isBrowser) {%>Upload from disk<%} else {%>Upload from photo library<%}%>
Upload from saved photo album
Remove Background Image
v<%=app.context.getSettings().appVersion%>
Back


|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object cetus.exec.Driver
public class Driver
Implements the command line parser and controls pass ordering.
Users may extend this class by overriding runPasses
(which provides a default sequence of passes). The derived
class should pass an instance of itself to the run method.
Derived classes have access to a protected Program
object.
| Field Summary | |
|---|---|
protected java.lang.String[] |
filenames
The filenames supplied on the command line. |
protected static CommandLineOptionSet |
options
A mapping from option names to option values. |
protected Program |
program
Override runPasses to do something with this object. |
| Constructor Summary | |
|---|---|
Driver()
Constructor used by derived classes. |
| Method Summary | |
|---|---|
static java.lang.String |
getOptionValue(java.lang.String key)
Returns the value of the given key or null if the value is not set. |
static java.util.HashSet |
getSkipProcedureSet()
Returns the set a procedure names that should be excluded from transformations. |
static void |
main(java.lang.String[] args)
Entry point for Cetus; creates a new Driver object, and calls run on it with args. |
protected void |
parseCommandLine(java.lang.String[] args)
Parses command line options to Cetus. |
protected void |
parseFiles()
Parses all of the files listed in filenames and creates a Program object. |
void |
printUsage()
Prints the list of options that Cetus accepts. |
void |
printVersion()
Prints the compiler version. |
void |
run(java.lang.String[] args)
Runs this driver with args as the command line. |
void |
runPasses()
Runs analysis and optimization passes on the program. |
protected static void |
setOptionValue(java.lang.String key,
java.lang.String value)
Sets the value of the option represented by key to value. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected static CommandLineOptionSet options
protected Program program
protected java.lang.String[] filenames
| Constructor Detail |
|---|
public Driver()
| Method Detail |
|---|
public static java.lang.String getOptionValue(java.lang.String key)
public static java.util.HashSet getSkipProcedureSet()
protected void parseCommandLine(java.lang.String[] args)
args
- The String array passed to main by the system.protected void parseFiles()
Program
object.
public void printUsage()
public void printVersion()
public void run(java.lang.String[] args)
args
- The command line from main.public void runPasses()
protected static void setOptionValue(java.lang.String key, java.lang.String value)
key
- The option name.value
- The option value.public static void main(java.lang.String[] args)
args
- Command line options.
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


The Grand Cay group consists of five main islands; Grand, Big Grand, Little Grand, Rat and Felix.
Little Grand Cay lies south of Walker Cay and is one of the main island in the Abacos group. It is identified by a tall radio tower at its western end.
Position 27° 12.75'N, 078° 18.8'W.
The Customs post re-located here from Walker's Cay and can be found at Rosie’s Place on Little Grand Cay.
Currently there are no known plans to move it back to Walker's Cay.
Last updated April 2016.
The entrance to the harbour is shallow but cheerful help with guidance may be had by calling on VHF channel 16.
There is a small marina here, but also an anchorage. The holding near the shore is reported not to be good, so beware of your anchor dragging.
Facilities ashore are limited, but it is a wonderful, quiet spot for snorkeling and fishing. Not to be missed, is 'Rosie's Place'.
An alternative anchorage can be found at Sandy Cay, Double Breasted Cays. It is protected from all directions except the south. Be aware of the tidal flow between the barrier rocks.
Last updated April 2015.


Installation¶
It may be necessary to install several system-level libraries to build odgi
.
On Ubuntu
, these can be installed using apt
:
sudo apt install build-essential cmake python3-distutils python3-dev libjemalloc-dev
odgi
requires a C++ version of 9.3 or higher. You can check your version via:
gcc --version
g++ --version
If this requirement is satisfied, obtain a copy of the repository and its submodules:
git clone --recursive https://github.com/pangenome/odgi.git
cd odgi
Finally, build odgi
using cmake
:
cmake -H. -Bbuild && cmake --build build -- -j 2
The -j
argument determines the number of threads used for the compilation process. In the command above it is set to
2
. As odgi
is a fairly large project, it is recommended to set -j
to the maximum number of available threads. This
can reduce the compilation time significantly.


more_vert ]]> Some Action Another Action Disabled Action Yet Another Action
more_vert ... ]]>
more_vert ... ]]>
more_vert ... ]]>
The mdl-menu component is exposed as mdlMenu to the template.
| Attribute | Description |
|---|---|
| mdl-menu-position |
Defines the position of the menu.
|
| Method | Description |
|---|---|
| hide | The menu will be hided. |
| show( event: Event, mdlButton: MdlButtonComponent) |
Shows the menu. event and button are needed to calculate the position of the menu. |
| toggle( event: Event, mdlButton: MdlButtonComponent) |
Toggles the menu. event and button are needed to calculate the position of the menu. |
The mdl-menu-item component draws the menu-items.
| Attribute | Description |
|---|---|
| mdl-menu-item-full-bleed-divider | Draws a line at the bottom of the menu item. |
| mdl-ripple | Enables the tipple effect on menu items. |


When there are not a lot of Java Application events, it could be that the main bottleneck of your application is the running code. First, look at the Threads tab and select the Overview tab. See CPU Usage Over Time. This shows the CPU usage of the JVM being recorded and the total CPU usage on the machine. In case the JVM CPU usage is low, but the CPU usage of the machine is high, which means some other application is taking a lot of CPU. Then, look at the other applications running on the system in the Processes tab from the System tab group. However, you may not see their CPU usage, so it is usually easier to use OS tools such as Top or the task manager to find out which processes are using a lot of CPU.
Select the Code tab group and look at the Hot Threads tab in case your application is using a lot of CPU time. This tab shows the threads that use the most CPU time. However, this information is based on Method Sampling, so it may not be 100% accurate if the sample count is low. When a JFR is running, the JVM samples the threads. By default, a continuous recording does only some Method Sampling, while a profiling recording does as much as possible. The Method Sampling gathers data from only those threads actually running code. The threads waiting for I/O, sleeping, waiting for locks etc are not sampled. Therefore, threads with a lot of method samples are the ones using the most CPU time; however, how much CPU is used by each thread is not known.
The Hot Methods tab in the Code tab group helps find out where your application spends most of the execution time. This tab shows all the samples grouped by top method in the stack. Use the Call Tree tab to start with the lowest method in the stack traces and then move upward. Figure 4-6 starts with Thread.run
, then looks at the calls that have been most sampled.
Figure 4-6 Code Execution Performance - Call Tree Tab


Classes: what are they good for?
When I was about 10 years old, I had a shoebox filled with hundreds of super hero "baseball cards." Each card listed specific information pertaining to the hero such as name, height, weight, diet, super power, and weakness, similar to that of a baseball card (except of course a baseball card would include things like batting average, RBIs, etc.). I used to love spreading the cards out on the floor and grouping them together by similar attributes, creating battle scenarios in my head I went along. As I received more and more cards on birthdays and holidays, it became increasingly difficult to keep track of everyone and the groups simply became too large to display on my floor. I needed a better way of keeping track of everything!
Now that I'm a little bit older than 10 and have a renewed interest in super heroes (not really, but let's go with it!), I want to use my newfound Ruby skills to organize my new cads. I suppose I could store my cards in their own separate hashes like this...
Now I just need to create about 200 more hashes and I should be all set. Seems a little cumbersome, doesn't it? What happens when I get new cards? Should I just create more hashes? Maybe I should make one big hash to store them all in? What do I do when I want my superhoes to actually do stuff (you know, like methods!) like #eat, #travel, and #sleep? Well, by now I'm sure you've guessed that hashes might not be the most efficient solution to our storing and method-creating needs and that there's probably a simpler way. If that's what you're thinking, you are absolutely correct. And if you think that the simpler way has to do with creating a class for our superheroes, you are on to something.
By creating a class, we can write methods once and have them run on all of our superhero objects. This is amazing and will save us a ton of time because now we don't have to write methods for each individual superhero. Think about how long that would've taken - Whew! So let's go ahead and start putting together our superhero class.
For instance: variables and methods
Now that we have the bare bones skeleton of our class, we need to give it some variables and get it ready for use. In order to do this, we will use a special method in the class called #initialize. By adding the #initialize method, our superhero class will look a little bit like the following:
You might be wondering what those funny-looking things that look like variables with the "@" sign in front of them are. As it turns out, they are variables with the "@" sign in front of them, and they are referred to as Instance Variables. We don't want all of our superheroes to have the same strength, so we use instance variables to take care of that. These variables are designated with the @variable_name notation and are able to be used in the same way for every instance of Superhero but will have a unique value for each. We already knew that classes shared methods; now we know that they share variables as well.
Now that we have our superhero variables, let's give our superheroes some actions, or methods. Since these methods will get called on an individual instance of the Superhero class, they are called Instance Methods. These methods are intended for use by all instances of the Superhero class whereas the methods we are used to defining, the ones outside of classes, typically belong to one object.
As you can see, the #attack and #sleep instance methods don't look much different than methods we've created in the past, they just act in a slightly different way because they are contained within our Superhero class. I could go on and on about classes but we'll have to save some of that good stuff (i.e. getters and setters!) for another blog post. Before I go though, I'd like to leave you with a (rather mediocre) haiku:
- Ruby classes in the file
- instances of variables and methods
- play together like friends


I use Animation on Scroll (AOS) to add awesome effect on pictures when you scroll the page. But sometimes, the pictures won't show the effect if it's positioned not on the scrollable position (like the first picture below)
You can check all the effect on AOS documentation here. Besides the pictures, you can also add AOS effect on paragraph as well. Like this:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
This is optional, but you can add a chart in the post. Like this:
To make a chart, I use Chart.js. You can check all the documentation here.
I don't use font awesome like usual blog do, but I found a great alternative which is an emoji but based on CSS. Check the documentation here.
This is a simple blog, so there is no much features I want to add but you can modify this template as your own. Feel free to download and change whatever you want to change in this template. Don't forget to give me credit in case you want to use this template to your public domain.
Thanks!
— Jericho Siahaya


We mind how you think.
Here be the rules for yar society:
Put yer content in here.
Put yer content in here.
Put yer content in here.
Here be the event for yar society:
Put yer content in here.
Put yer content in here.
Put yer content in here.
Here be the students for yar department:
Put yer content in here.
Put yer content in here.
Put yer content in here.


--- layout: home ---
describe, it, before, after, expect, mockTheres another class of foounit keywords for asynchronous testing, but these are explained in the async awesomeness section.
waitFor, run, waitForTimeout
These are the basic building blocks of foounit and asynchronous BDD style testing.
In BDD speak an it block is an example that defines usage of a particular feature. So let's say we want to test that a string is less than 10 characters. You might create an it block that looks like this:
it('returns true', function (){ var str = "sml_string"; // expect is assertion... don't worry about this for now, but this test will pass expect(str.length < 10).to(beTrue); });
So you might think that an it block is overkill for a test like this, but also realize that this is a contrived example. The nice thing about using it is that you are able to label this test with a description for the next developer that touches this code.
If you just want to play around with foounit to get an idea for how this will work, you can run something like this. Create a file called test.js with this code:
var foounit = require('foounit').globalize(); it('fails the test', function (){ expect(true).to(beFalse); }); foounit.run();Then run the file with this command:
$ node test.js
This test will fail, but it will give you an idea of what happens when you run an example.
Internally, describe creates a group of examples. All ths really means to you is that describe actually defines a particular behavior. Let me explain...
Let's say you have a signup form widget that allows you to submit a form when you have a password that is 8 or more characters, but it shows an error message if you have password that is less than 8 characters. You might have a test that looks like this:
describe('when the password is 8 or more characters', function (){ it('allows you to submit the form', function (){ ... }); }); describe('when the password is less than 8 characters', function (){ it('displays an error message', function (){ ... }); });
You can also nest describes if your code has nested behaviors (or nested if statements). Nested describes look something like this:
describe('when foo is not falsy', function (){ describe('when foo is an integer', function (){ it('returns true', function (){ ... }); }); describe('when foo is a boolean', function (){ it('returns false', function (){ ... }); }); }); describe('when foo is falsy', function (){ it('returns false', function (){ ... }); });
The expect keyword is just another way of creating an assertion. An assertion is a way to test that a particular value is what you expect that it should be. Here is a breakdown of how expect works:
expect( foo // actual value ).to( be // this is a === matcher... more on this later , 100 // expected value );
Here are some additional example expectations:
expect(1).to(beLt, 2); // passes expect(true).to(beFalse); // fails expect([1,2,3]).to(include, 2); // passes
Here are some examples of expectations that assert actual and expected do not match:
expect(1).toNot(be, 2); // passes expect(function (){ throw new Error('errar!'); }).toNot(throwError); // fails
A before block is something that sets up a particular test. A before block is run once for each group and they can be nested. before blocks are great for asserting that a test is setup properly before an example is run and for removing clutter from your tests. before blocks can be nested within describes and are run in order for each example.
describe('when foo is 1', function (){ var foo; before(function (){ // runs first foo = 1; }); it('does something', function (){ ... }); describe(when foo is 2', function (){ before(function (){ // runs second foo++; expect(foo).to(be, 2); }); it('does another thing', function (){ ... }); }); });
after runs after each test. It's great for cleaning up the environment and it runs even when the test fails.
Here is how to use before and after in conjunction to cleanup global variables:
describe('when the current user is bob', function (){ var origUser; before(function (){ origUser = global.currentUser; // save off currentUser global.currentUser = 'bob'; }); after(function (){ global.currentUser = origUser; // reset currentUser after the test runs }); it('does something', function (){ ... }); });
These keywords are 90% of what you need to write tests in BDD style using foounit. There is a lot more to foounit than just these keywords but you can get by without learning about additional matchers and asynchronousness if you are just experimenting. If anything in this guide is unclear, then please email the group.
var successCallback; before(function (){ successCallback = mock(function (data){}); $.ajax('http://localhost:5057/data.json', { success: successCallback }); }); it('gets the data', function (){ waitFor(function (){ expect(successCallback).to(haveBeenCalled); }); });
In this example, an xhr request is made to get the JSON data at http://localhost:5057/data.json. We have mocked the success callback and we wait for the response to succeed and call our callback to be called. If the request succeeds then the test will pass, but if the request is unsuccessful then the test will fail. The waitFor keyword waits for the function it is passed to run without failing. If the waitFor block fails, then it is retried until a timeout is reached. If the timeout is reached then the test fails and a kitten dies.
There's more to asynchronous testing than just waitFor but waitFor will generally get you pretty far. Another common use-case is to wait for an expectation to be met, then do something else and wait for another expectation. In this case you can use run to insert yourself into foounit's asynchronous execution queue. Here is an example:
it('does a lot of async stuff', function (){ var foo = ''; setTimeout(function (){ foo = 'bar'; }, 200); // Waits for foo to become 'bar' waitFor(function (){ expect(foo).to(be, 'bar'); }); // Runs after the waitFor above run(function (){ setTimeout(function (){ foo = 'baz'; }, 200); }); // Waits for foo to become 'baz' waitFor(function (){ expect(foo).to(be, 'baz'); }); });
foounit can also assert that something never happens with the use of waitForTimeout. These kinds of tests are generally frowned upon because they slow down a test suite, but sometimes they are valuable enough to offset the downside of slowing down the test suite.
waitForTimeout will run a function until a timeout is reached. The first time the function passes without error, waitForTimeout fails. Consider this example:
it('doesnt get to 1000 fast enough', function (){ var foo = 0 , inc = function (){ foo++; setTimeout(inc, 200); } setTimeout(inc, 200); waitForTimeout(function (){ expect(foo).to(beGt, 999); }); });
This example will fail because foo will not reach 1000 in the time that it takes for waitForTimeout to timeout.
Asserts that actual === expected.
expect(1).to(be, 1); // passes expect(undefined).to(be, null); // fails
Assert that actual is greater than expected.
expect(5).to(beGt, 4); // passes expect(1).to(beGt, 2); // fails
Assert that actual is === false.
expect(false).to(beFalse); // passes expect(null).to(beFalse); // fails
Assert that actual is falsy.
expect(false).to(beFalsy); // passes expect(null).to(beFalsy); // passes expect("test").to(beFalsy); // fails
Assert that actual is less than expected.
expect(1).to(beLt, 2); // passes expect(5).to(beLt, 4); // fails
Asserts that actual === null.
expect(null).to(beNull); // passes expect(undefined).to(beNull); // fails
Asserts that actual is truthy.
expect(1).to(beTruthy); // passes expect('').to(beTruthy); // fails expect(true).to(beTruthy); // passes
Asserts that actual === undefined.
expect(null).to(beUndefined); // fails expect(undefined).to(beUndefined); // passes
Assert that actual is deeply equal to expected. This is useful for saying that one object is the same as another but they are referencing different objects.
expect({ foo: ['bar'] }).to(equal, { foo: ['bar'] }); // passes expect({ baz: 1 }).to(equal, { baz: 2 }); // fails
Assert that an array has an element that matches type and object equality of expected.
expect([1, 2, 3]).to(include, 2); // passes expect([1, 2, 3]).to(include, 10); // fails
Assert that actual matches a regex.
expect('foo bar baz').to(match, /bar/); // passes expect('foo bar baz').to(match, /qux/); // fails
Asserts that the a function throws an error. The error message can be matched against to assert that the correct error message was thrown.
expect(function (){ throw new Error(); }).to(throwError); // passes expect(function (){ throw new Error('HEY NOW'); }).to(throwError, /Fuuuuuu/); // fails expect(function (){ /** I don't throw **/ }).to(throwError); // fails


{% if user.schedule.all|length > 0 %}
You haven't added any classes to your schedule yet. Search for the course number or name below.


information
| people@shack: | Loading.. |
| Power consumption: | Loading... |
| Keyholder: | Loading... |
| Radiation Level: | |
| Gelber Sack: | Loading |
| Papier Müll: | Loading |
| Rest Müll: | Loading |
| Open Issues: | Loading.. |
| Feinstaub: |
Nordseite:
Südseite:
|
| PSI Alarm: |
Slide to enable -> |
| A-Alarm: |
Slide to enable -> |
| Never press this link |


Death?
Death?
“Oh! I am so, so sorry!”
This is what Tim Keller wanted to say. In fact, he was straining desperately to speak at all.  At this point in time, Tim could not voice his thoughts.
The shame he felt at the thought of having to be rescued was quickly being replaced by full on panic as his head bobbed up and down in the gentle waves. It was an unfortunate turn of events, until this point it had been a very ordinary, but pleasant vacation. The break from work had been welcome, and he had just begun to relax into the trip. A harmless little swim to shed some nervous energy, to just float in the lake and bathe in the sun’s rays. He could still see his wife and son, splashing in the shallows. His son’s giggle carried easily over the flat surface of the lake and Tim smiled, despite himself.
He was pulled under again, but found he didn’t have the strength to kick back up. His felt like he was pulling himself through molasses, a sticky morass that clung to him, dragged and clutched, pulling him down, down.
This would tear them apart, he thought in a brief moment of lucidity. He could see his son splashing around in those vivid red water wings, while his wife laughed and smiled, her golden hair spinning the sunlight into a halo around her head. At the time, those waterwings had seemed like a harmless, vaguely unmanly, indulgence of the fears of childhood.
He resurfaced, gasping for breathe. His mouth barely breaching the surface as it sucked and gasped at the air. Recalling a news program he had watched about what to do in the event of drowning, Tim kicked his shoes off.
It had been hard for Tim to accept that he was drowning. Even now, he hardly exhibited the symptoms of a drowning man. No cries for help. No dramatic shouts, or splashing. He wasn’t waving his arms wildly in the air. In fact, Tim seemed altogether too calm for a man drowning. But far from possessing a quiet dignity about the whole thing, this was because Tim had by now inhaled far too much of the waters of Lake Michigan, and was rather tired.
Tim clawed at the water, his body fully in the thrall of the brutal, unrelenting motions of panic. With a last burst of strength he forced his head above water. His son, his wife, splashing happily in the shallows. The young lifeguard perched in his tower, leaning down to talk to a young woman in a bikini. Turning his head, he caught Tim’s eyes. The last thing Tim saw before he went down for the last time was the whites of those eyes.
He held his breath. He hadn’t managed to get much air, and he could feel the clastrophoic pressure of having no air in your lungs, the body screaming, begging for oxygen. It pushed in on him from all sides, from inside of him. He opened his mouth, gagging at the effort require not to breath in.
Tim looked upwards, he could see the surface, just above his slowly flailing hands. It had the placid dapple of a swimming pool being stirred gently in a summer breeze.
Tim breathed out, and then he breathed in. The water rushed in over his eyes, filling his mouth, his nostrils. It was forcing its way into him, pushing into his body. He tried to push, to push it out, but it kept rushing back in, flooding into his spasming lungs.
Tim had recently watched a nature documentary centered around a pack of Alaskan wolves. One scene in particular had always stuck with him. It was near the end of a chase, the pack had seperated a young deer from its mother and had been herding it, nipping its heels to drive it into exhaustion. The deer was tired of running, you could see it in the whites of its eyes, the way it stumbled and staggered onwards. The wolves had dispensed with pretense and begun to eat it. Tearing steaming chunks out of the deer as it ran and stumbled. The barbarity had shocked Tim at the time, but what had really stuck with him was when, near the end of its run it had just layed down. It was so calm. It had this quiet dignity as it lay there. It didn’t fight, didn’t struggle as the wolves ate it alive, picking flesh off its still breathing form. That quiet acceptance had terrified Tim.
Tim had stopped struggling now. His lungs still seized, spasming around the fluid rushing to fill them, but he was strangely distant from it. He began to sink, his clothes weighed down by the water. There was a calmness that gripped Tim, and as he watched the last of the air bubble up away from him, he considered that it was probably shock.
The last thing Tim felt before he blacked out was a strong hand gripping his hair.
*
A big face, with an angry pimple on its nose. A sparse forest of hairs on the upper lip, and a thin roapy chain of saliva between the upper and lower lip. All of this was swooping down towards Tim in an inevitable slow motion. This was the first thing he saw when he came to.
The second thing Tim saw was the large crowd of people clustering around him, everone’s eyes wide, staring directly at him. Tim became more and more aware of the cold, wet feeling of his swim trucks clinging to his thighs. He imagined what he must look like: a middle aged man, muffin topping over his slightly too tight shorts, skinny pale legs lying limply in the sand. All of this caused a deep sense of embarrassment to fall over him.
All at once, Tim wished he was back out in the ocean. He tried to say, “No! Please! I’m so sorry, I didn’t mean to be an inconvenience. Really, I’m fine.” but his throat had ceased to work. In that moment, Tim truly wanted to die.
*
Tim had been strapped into a stretched and bundled into an ambulance. They hadn’t shut the doors, and he could hear voices directly outside. “I don’t understand it,” the lifeguard was saying to an EMT, “maybe I just wasn’t fast enough…”
“You did your best, okay? This isn’t anyone’s fault.” The EMT paused. “I just need to ask you, one last time: Did he ever show any signs of responsiveness?”
“Hey? Any sign at all?”
“No. Maybe if I had been faster.”
The other EMT was talking to Tim’s wife. Tim peaked, allowing one eye to slowly nlid. He could make them out, standing right in front of the doors. They weren’t look at him.
“I’m sorry, Mrs. Keller, we just don’t know. The folks up at St. Mary’s will be able to tell you more.” The EMT put his hand on her shoulder. “We’ve got to go now.”
She nodded, eyes tight. She was making that face, that universal face of someone who doesn’t trust themselves to speak.
This has gone too far. Just sit up, and tell everyone you’re fine. Tim thought.
But he might have to explain that he was fine, there was nothing wrong with him, and he had just been really embarrassed and had wanted to pretend he was anywhere but here. However, Tim decided he couldn’t look the EMT in the eye if that happened, so he kept his eyes closed.
*
“He just isn’t responding. We still don’t even know what’s wrong with him. Okay look,” The doctor turned his monitor around, bringing up two videos and gesturing at them with his pen. “These are two MRI’s. One is a healthy person, cogent and awake, the other is your husband.” The doctor looked up at Tim’s wife, “Can you tell which is which?”
Tim’s wife was fidgeting with a tissue, her face pinched. “Well, no. But I’m not a doctor!”
The doctor leaned back in his chair and raised his hands up. “Trust me, no one can. We’re flying the best neurologist in the country here. He should be here tomorrow.”
The ghost of a wince crept over Tim’s face.
The doctor stood up, and began to pace. “Mrs. Keller, Tim’s brain will actually respond to stimuli. If you speak to him, the speech centers of the brain light up, as if he is thinking of a response. He just can’t seem to translate that into control over his body. Yet his spine is just fine!” The doctor threw his hands in the air, fixing Tim’s wife with a pleading look. “You don’t understand how frustrating this is, Mrs. Keller. We think that this is the only way.”
“You said he is fine. You said he is in there. Why do you want to cut him open?” Tim’s wife started to cry. “Why won’t he wake up?”
The doctor sat, not looking at her. Tim’s wife stood up, softly.
“I’m sorry. Do whatever you think is best, Doctor. Even if that means…”, she paused, dabbing at her eyes with the tissue. “Even if that means the surgery you described.”
The doctor nodded. “I’m sorry, Mrs. Kelley. We’re doing the best we can, we really are.”
She nodded once, slowly, before she left. The doctor followed her out.
This had gone on far too long. It is out of control.
He couldn’t even bear to think about how much money this was costing his insurance company.
I’ll just tell them I feel fine, and I would like to go home.
Tim walked himself through the scenario, imagining the hollow pronouncement–“Hey guys. Miracle! I feel fine now.”, the slight suspicion in his wife’s eyes, the knowing look the doctor would give him, that you-little-fucker-you’ve-been-fine-this-whole-time-and-we-flew-down-the-best-neurologist-in-the-country-who-do-you-think-you-are look.
No, that would be simply too much. It would be too much to face everyone now. Tim decided he would just have to wait it out.
I’m sorry. I’m so sorry.
* * *


Jet2.com and EasyJet buy Thomas Cook's landing slots
JET2.COM and EasyJet have bought all of collapsed tour operator Thomas Cook's landing slots at in the UK, the company's liquidators have said.
EasyJet snapped up 27 pairs of slots, at Gatwick and Bristol Airports, for £36 million.
Rival budget airline Jet2.com bought the remaining slots at Stansted, Birmingham and Manchester Airports, for an undisclosed amount, the Official Receiver said.
EasyJet said it will release more information later this month.
"This outcome has been facilitated by the collaborative approach of Thomas Cook's commercial partners at UK airports and the support of both internal and external slot co-ordinators," the Official Receiver said.
It comes less than two months since Thomas Cook entered administration.
Administrators have since been trying to recoup as much money as possible from the business to help pay back its debts.
Earlier this month, they sold off the Thomas Cook brand name to Chinese company Fosun for £11 million. Fosun said it still believes in the brand value of Thomas Cook.
And in October, Sunderland-based Hays Travel paid £6 million to buy Thomas Cook's 555 high street stores, promising to keep many of the jobs.
The collapse has caused politicians to call for changes.
Business Secretary Andrea Leadsom pledged to take action to help customers who face losing out on injury compensation claims.
"Thomas Cook only took out insurance cover for the very largest personal injury claims," she said on Tuesday.
"For agreed claims below this figure up to a high-aggregate amount, they decided to self-insure through a provision in their accounts."


Around 1.5 month ago, there was Wuhan virus, which was in the far lands of China. It was another country. Then there were 2-3 cases in Kerala. My country, but a different state. Then we got a case in Kalaburagi. So, it was my state, but a different city. Then we got a case in Whitefield. Oh my God, it was in my city, but Whitefield is 15 km away from where I stay. Then, a few days ago, we got a case in Singasandra, which is 0.5km from where I stay. One day it might come to building where I stay, and then in my home. Scary.
Government seems to be doing the best it can. Lot of money to help poor people is released, chief ministers of states and district administration are helping in their own ways. But poor people suffer and some of them are undertaking long journeys back home.
One sikh preacher in punjab has infected perhaps hundreds. Thankfully he is dead now. One mullaji from Tumkur with 3 wives and 16 kids also caught the virus and is dead. Hard to feel sympathy for anyone who was traveling after March 10 by aeroplane and got coronavirus. Some had genuine reasons, but for some it was party and for some it was religious festivities.
Today was Day 2 of lockdown. Pollution level today was the lowest I have seen in Bangalore ever since I started tracking it, with PM2.5 reading going down to as low as 16μg/m3. However, offsetting this good news were the videos of the laborers from various parts of the country underdaking hundres of kilometers of journey to their hometowns. Poor people are impacted very bady.
The news is the shops around my apartments are open and have some supplies. I have not gone out of apartment for 5-6 days now. I am always in either my flat or Pankaj's flat, and Pankaj is the only person whom I see in person. Pankaj today got bread, milk and ghee from swiggy go, which is a good news. I have vegetables which will last for 3-4 more days. We will need to get some supplies by then.
Today was the second day that a group of us did Yoga over skype in the morning.
Today, Modiji declared nationwide lockdown. In his speech he also emphasized that we have to practice social distancing otherwise we will be in very bad shape in coming weeks.
I think this is a very good step, since many people were still not taking the matters seriously. I saw some videos where police was beating with lathis people who came on the street. This is the way to make some people understand that matter is serious.
My daily activities have changed significantly over past 3 weeks. Earlier I used to travel anywhere I wanted to. Then in view of the virus, I cancelled my Lucknow trip. Then, Pankaj and me limited our outing to 2 restaurants situated next to each other. Then we stopped going to these two restaurants and I stopped online delivery too. We started cooking by ourselves. Then we stopped our house cleaning maid too, and stopped using elevatator. At some point I stopped going out for running and ran inside the apartment. Now I don't even run inside the apartment. Today morning we did group exercise over video chat!


registration form validation
name min 2 char
age must be number
email is not valid
pass min 6 character
Register
toggle div :
toggle
sample
form validation
username must have more than 3 charactrs
login


KeyFilter directive restricts user input based on a regular expression.
KeyFilter directive is applied to an input text element using pKeyFilter attribute whose value is either a built-in regular expression name or a custom one. Following input only accepts integers.
Commonly used cases have their own built-in shortcuts.
A custom filter is provided by binding a regular expression, here is an example that blocks special characters including "< > * !"
Instead of blocking a single keypress, the alternative validation mode which is enabled with pValidateOnly property validates the whole input with a built-in Angular validator.
| Name | Type | Default | Description |
|---|---|---|---|
| pValidateOnly | boolean | false | When enabled, instead of blocking keys, input is validated internally to test against the regular expression. |
This directive does not apply any styling.
None.


Resume & Portfolio
In a nutshell...
For the past 7 years I have been using ruby on rails and javascript to design, develop and deploy rich, web-based applications for medium to large sized companies. Prior to that I was an Oracle PeopleSoft professional with 15 years of Fortune 500 consulting.
I have extensive technical expertise and industry knowledge in the following sectors: Government, Retail, Health & Wellness, Media, Financial Services, Telecommunications, Insurance, Utilities, Logistics, Staffing, and Higher Education Administration.
I have added significant value to organizations such as Dish Network, United Health Group, the IRS, Wells Fargo, UPS, Hitachi, Boeing, Bank of America, Hawaiian Telcom, Johnson Controls, Waste Management, Montgomery Wards and many more by architecting and delivering creative, elegant and cost-saving solutions in time-sensitive, high-pressure environments.
Lead Enterprise Architect for SlingTV / Dish Network. (March 2016 – November 2017)
Migrated a bloated, “monolithic” rails 3.2 app to a polyglot microservices architecture leveraging Docker, RabbitMQ, Redis, Swagger, JSON Api spec, Devise, and managed through a custom admin tool called Hub that provides a central registry for all of our microservices plus role based_authentication across the entreprise, logging, approvals, workflow, state processing, and other common enterprise wide services while coordinating communication with 20+ 3rd party systems.Created a custom Rabbit interface to manage all of the messaging metadata that allowed real-time configuration of channel, queues, exchanges, consumers, connections, message types to handle spikes in traffic that occasionally reached over 1 million concurrent users.
Put a front end on the product catalog that allowed for complex configurations via wizards and leveraged social paradigms including chat, wall, connections, and othres to create collaboration through the tool in a natural and streamlined way.
Consolidated a dozen tables across 3 databases to create the first enterprise wide view of partnership that Sling ever had.
Created a steady stream of tech debt and refactoring stories and coached and paired with junior devs to get the work done while leveling up skill sets.
Create Sling House Rules – a comprehensive, 100-point plan to transform our development and scrum practices with the aim of improving morale and velocity.
Rose from dev to lead to architect to head of enterprise architecture within 12 months.
Created system architecture diagrams, ERDs, process flows, high fidelity mockups, detailed functional designs and other important design artifacts that had not been leveraged until I got there.
UI / UX Designer for iThrive. (December 2015 – March 2016)
Built a consumer facing, cancer survivorship app in Rails 5 using a Google Material Admin Twitter Bootstrap theme.Created a family of “pretty” consumer-facing pages to serve as tutorials, onboarding, and tour pages.
Deployed the app in a Docker container to Digital Ocean and Aptible for hippa compliance.
Created custom widgets for a survey, a plan dashboard, a wizard, sliders, tags, and other UI elements that were not well covered by the theme.
Senior Full-Stack Developer for United Health Group. (September 2014 – January 2016)
Built a secure messaging client that allowed communication between doctors and patients, in a branded, single page app (SPA) with Backbone, Marionette, Jade, Haml, ERB, and twitter bootstrap for the frontend with a rails api for the backend.Refactored the capybara feature spec suite to: be super DRY, eliminate fixtures, create and destroy necessary data for each scenario using FactoryGirl plus a custom, factory pattern for api calls that I created, use poltergeist for headless browser testing, run in parallel with parallel tests, use VCR and Mocks to eliminate certain slow and unreliable external dependencies, use perftest and benchmark to identify performance issues, address slow areas with techniques like wrapping in database transactions and find_each, eliminate slow capybara finders and assertions with non-waiting alternatives.
Delivered the ability to upload and send multiple attachments in a secure email using a multi-part http request with the remotipart gem.
Delivered the same attachment capability over mobile devices using forwardhq for a tunnel to saucelabs and browser stack to automate testing and ensure cross device compatibility.
Utilized Capistrano to deploy, Jenkins to run the spec suite, Brakeman and New Relic for health checks and vulnerability notifications, and also migrated infrastructure from Digital Ocean to Open Shift Enterprise. Handled authorization and permissions with Devise and Can Can.
Implemented js plugins: Ckeditor for html editing of emails, Twitter Dropdown, Twitter Typeadhead.js plugin for autocomplete, Bloodhound.js for search matching.
Enhanced performance with various caching techniques including Rails.cache, Request Store, api cache, plus sidekick and redis for offloading work.
Singlehandedly supported a consumer-facing, diabetes prevention website for 10,000 active users with backbone and rails views for the UI and a rails backend.
Built one of the largest private health care exchanges in the country (500k+ users) as a rails restful api.
Senior Developer for Parker School Uniforms. (April 2011 – August 2014)
Developed an entire supply chain management system using ruby on rails with a javascript front-end and dozen of modules including: Adjustments, Bill of Materials, Landed Cost, CRM, Inventory, Purchasing, Projections, Allocations, Receiving, Work Orders, Pick Tickets, Warehouse Management, Physical Inventory, Transfers, Store Replenishment, Supplier Portal, POS support, payment processing, Tax Service integration, Pricing and Promotions, Shipments, support for e-commerce sites.Developed a hotel guest management application using pure rails, swagger, rspec, and guides.
Utilized Sencha’s Ext.js javascript framework to create reusable UI classes for menus, toolbars, buttons, list and detail pages, models, views, controllers, etc…
Administered unix production environments on Heroku, Digital Ocean and Amazon Web Services.
Built over 150 models, with a mysql backend, each accessible with a json, restful webservice.
Migrated data from salesforce to a custom CRM that I built, saving my client $10,000+ per month in license fees.
Senior Developer for Mountain West Insurance. (Sep. 2010 – Mar 2011)
Developed consumer facing microsites in a .net environment using C#, Sql Server, and Sencha’s Ext.net and eventually migrated entire codebase to a ruby on rails framework.Built a configurable insurance rating engine that allowed customers to generate their own insurance quotes online using a Bootstrap, Rails stack.
Utilized formtastic and formbuilder gems to create a configurable, generic form building service that allowed clients to create their own online forms.
OTHER CREDITS
Senior Consultant (US Forest Service, Albuquerque, NM) Mar. 2010 – Sept 2010Senior Consultant (Cooperators, Toronto, Canada) Nov. 2009 – Mar. 2010
Senior Consultant (Department of Energy, Portland, OR) Sept. 2008 – Nov. 2009
Integration Specialist (Knoxville Utilities Board, Knoxville, TN) Oct. 2007 – Sept. 2009
Senior Consultant (Baltimore Aircoil, Baltimore, MD) Apr. 2008 – Aug. 2008
Functional Lead (Arizona State University, Tempe, AZ) Oct. 2007 – Apr. 2008
Senior Consultant (Hawaiian Telcom, Denver, CO) Jan. 2006 – Oct. 2007
Functional Lead (BlueCross BlueShield, Chattanooga, TN) Jan. 2007 – May 2007
Project Manager / Functional Lead (Cybex, Medway, MA) Nov. 2006 – Jan. 2007
Senior Consultant (Homestore, Westlake Village, CA) July 2005 – Dec. 2005
Senior Consultant (Johnson Controls Institute, Milwaukee, WI) Jan. 2005 – July 2005
Senior Consultant (Wells Fargo, San Francisco, CA) Nov. 2004 – Jan. 2005
Senior Technical Consultant (Hitachi, Dallas, TX) June 2004 – Oct. 2004
Senior Consultant (Boeing, Irvine, CA) Jan. 2004 – June 2004
Senior Consultant (IRS, Washington, DC) June 2003 – Jan. 2004
Technical Lead (UPS, Dallas, TX) May 2002 – May 2003
Technical Lead (Waste Management Inc., Houston, TX) Aug. 2001 – May 2002
Senior Software Engineer Inc., Encino, CA) Nov. 1999 – Aug. 2001
Senior Consultant (Galahad Software Inc., St. Petersburg, FL) Sept. 1995 – Oct. 1999
Programmer/Analyst (Intrepid Systems, Inc., Alameda, CA) June 1993 – Aug. 1995
B.S. in Economics from the University of California, Los Angeles June 1998


{% extends 'base.html' %} {% block page_title %}{{ block.super }} - Not Found{% endblock %} {% block page_content %}
The requested resource was not found. Please make sure the URL is typed correctly.


--- title: Red Butte Photo of the Day September 29, 2009 date: 2009-09-29 00:00:00 -06:00 categories: - whats-blooming layout: post blog-banner: whats-blooming-now-fall.jpg post-date: September 29, 2009 post-time: 2:00 PM blog-image: wbn-default.jpg ---
Pinus edulis is one of 20 species of pine tree that delicious pine nuts are harvested from. The seeds are very important to wildlife and are eaten by many insects, mammals and birds.
In its native plant community, it grows very slowly, and trees witha trunk diameter of 6 to 8 inches can be well over 100 years old.


This is a visualization of a Twitter user's timeline. Each circle represents a Tweet. The x-axis shows the time a Tweet was posted and the y-axis shows the Tweet type of the Tweet. You can zoom the displayed time interval by scrolling. If you hover over a Tweet, the Tweet text will appear in the upper left corner and the Tweet you're hovering will become enlarged. Above the Tweet text in the upper left corner, there's a search box that let's you search all Tweets. If the character sequence you're searching for appears in a Tweet text, the Tweet circle where the character sequence is found is enlarged and colored yellow. If you click on a Tweet, the actual Tweet will pop up. You can click on the actual Tweet to be redirected to Twitter's web site and view the full Tweet with replies and comments.


The Fluid Objects Palette contains objects for building dynamic models of hydraulic flow involving tanks, pipes, pumps, etc. The flow rate in the system is calculated by solving the unsteady Bernoulli equation.
The following objects are provided in the Fluid Objects palette.
Fluid Objects Palette
|
Object |
Description |
|
Fluid |
Defines a specific fluid and its properties. |
|
FluidFlow |
Computed flow of a specified fluid between a source and a destination. |
|
FluidFixedFlow |
Constant flow to/from a specified tank. |
|
FluidTank |
Cylindrical vessel for storing fluid. |
|
FluidPipe |
Cylindrical conduit for transporting fluid. |
|
FluidCentrifugalPump |
Type of pump with a rotating impeller. |
Many fluid objects use the following inputs and outputs.
Fluid Object Inputs
|
Keyword |
Description |
|
Previous |
The upstream component that feeds this component. |
|
Diameter |
The hydraulic diameter of the component. Equal to the inside diameter of a pipe with a circular cross-section. |
Fluid Object Outputs
|
Output Name |
Description |
|
FlowArea |
The cross-sectional area of the component. |
|
Velocity |
The velocity of the fluid within the component. |
|
ReynoldsNumber |
The Reynolds Number for the fluid within the component. Equal to (velocity)(diameter)/(kinematic viscosity). |
|
DynamicPressure |
The dynamic pressure of the fluid flow. Equal to (0.5)(density)(velocity^2). |
|
InletPressure |
The static pressure at the component's inlet. |
|
OutletPressure |
The static pressure at the component's outlet. |


An error occurred!
{{adminCtrl.error}}
Below is a list of all currently scanned paths. The scanning is done recursively, meaning that for any path added all sub-folders within the added path will also be scanned.
| File path |
|
| {{path.listeningPath}} |
|
No paths has yet been added.
Add a new path