Why did I take a break ?
What/how had I planned for it ?
What/how did it end up like ?
What did I learn ?
What could have done differently ?
Will I do it again ?
I took an 8 months long break from work beginning July 2016 till March 2017. This was after two years of working as an associate product manager at hike messenger.
Work hours
My work hours at hike were usually long. I left around 9 in the morning and came back by 9 in the night or even later. It wasn’t that I had a lot of work. Sometimes I did but a lot of times work just expanded to take up the time I had. As a result I was left with very little time to do anything for myself. I was usually too tired on the weekends to do much but rest and maybe exercise.
Unnatural lifestyle
Delhi can be unforgiving place weather-wise for most parts of the year. It’s either too hot or too cold. So most of my time was spent indoors in an air-conditioned environment. I’d sleep in an AC at home, travel in an AC cab and spend my day in an AC office. So one day while talking to a friend who was rejoicing at the rain and temporary respite from heat, the penny dropped for me. I had failed to notice the good weather because I had not seen the sun in weeks. This did not seem right to me.
Content of work
While working at hike was at times quite interesting, I had begun to feel that I was only having an impact on a very small component of the overall business.
I had joined in a product management role straight out of college without any hands on technical experience. So often during my work I felt my hands to be tied. I wanted to build things on my own but the best I could do was make some mockups of them and hope that others found the idea interesting enough to work on it.
Thirdly, even through college I had never really worked on a project end to end and that sense of unfulfilled potential did gnaw at me. I longed to create something with my hands and polish it.
Now I could have stayed at hike and tried to fight for these. But I didn’t want to be constrained by any kind of institutional limitations.
Financial security
Two years of job had meant I had decent enough saving even though I had not invested or spent money too wisely. It is amazing what a bit of money in the bank can do for your risk appetite.
What/How had I planned for it ?
With the money I had saved, I figured that I could easily last for 2 years at a comfortable lifestyle and perhaps 3 years if I pinched a bit along with some travel thrown in.
So I did not have any immediate hard deadline not he break.
Things I had planned to do during this period included:
- Backpacking
- Working on fitness
- Doing online courses on machine learning
- Improving my coding skills
- Dating girls
- Taking the GRE
- Applying for internship positions abroad in AI
- Reading as many books as I could and specifically Gödel Escher Bach
- Writing
- Starting up
Let’s review how my plans went regarding each of the 10 things I mentioned above.
-
Backpacking
I travelled for around 25 days across the Western Ghats. The highlight of the period was my solo cycling trip from Bangalore to Coorg. I wrote more about it here. - Working on fitness
This has been a failure. All my attempts fizzle out after the initial excitement. - Doing online courses on machine learning
This went well to an extent. I began with some of the more theoretical courses but soon realised that machine learning is moving more towards the hacker kind of DIY era. This dovetailed in with my plan to work on my coding skills. I feel that I need to work on my statistical skills. Will write more on learning machine learning separately. - Improve coding skills
I did not work on this separately but as part of my plan to learn machine learning. I won’t say I am a good programmer. But I now have enough confidence to be able to hack something up with the help of stackoverflow and given enough time. - Dating girls
This went surprisingly well. Thanks in no small part to technology (read Tinder). I went out with more girls than I would have ever done in life prior to this point (zero). - Taking the GRE
The quantitative and language part went well.  I will take it again if needed but I do not have any immediate plans of going for higher studies. - Applying for internship positions abroad in AI
I figured I would do this if I needed to go for higher studies but I realised I did not want to do that. So I dropped this plan after a while - Reading as many books as I could and especially Gödel Escher Bach
One can never really be satisfied with the number of books one reads. Even so, I feel that I did not read enough and instead wasted time surfing the internet or watching some stuff. GEB still resides on my shelf incompletely read. - Writing
I did not do enough of it. I am trying to make up for it now. - Starting up
I did not startup. I still have not figured out what problem to solve. I need to brainstorm more on this.
There were a few things I did that I had not planned on.
- Moving to Bangalore
This was as much to get away from home as to get away from the Delhi pollution. Plus I like the weather and the fact that it allows me to walk around throughout the year. - Standup comedy
The standup comedy scene in Bangalore is very vibrant and I took up performing at open mics. I quit after about 6 months due to competing priorities and loss of interest. This experience of mine deserves a separate article. - Learning the keyboard
I took classes for a month. Will take it up again soon. - Applying for an internship at a computer vision company
Doing and Learning
After a long time, I tried to get out of my comfort zone and do new things on my own. Below are some of the things I learnt during this process. Some of it may be obvious to people who have had a more hands-on upbringing.
- When you try something new, chances are you’d be wrong or embarrassed. Don’t let that stop you from doing something
- There is hidden complexity even in things that look very trivial.
- Keep things as simple as possible but no more simple. This is a corollary to the previous point. Things will get complex as you go along. It’s important to keep that in check so that you have a handle.
Example - When you pack for a long trip, you should keep the bare minimum number of clothes. Stuff piles on very quickly. I faced this during my trip. My backpack became too heavy and my agility was effected. At places I had to leave my bag behind in my hotel room, which is not always a good decision. - Doing is the best way of learning if you ultimately want to do the said thing. This is because it is impossible to explicitly state every step like a recipe (because of the above mentioned complexity). Doing also helps you understand the problem you are trying to solve much more intimately.
This is not to belittle theory. But one should start doing as soon as one has the understanding of the minimum possible theory. Theory should be used as a guide to doing rather than an end in itself.
Example -- Say you want to learn to recognise the digits in an image. One way is to study all possible courses on machine learning and then when you think you are confident enough, attempt the problem. The other option is to look for the easiest approach, code it up and see what results you get. Then read up on why it’s not the best trick. Find better approaches that people have tried. Decide on one of them and attempt it. Tweak it to suit your problem. And so on.
- Say you are a standup comedian and you have thought of some great new idea. The best way to judge it is to tell it to people and notice their reaction. This is actually a pretty standard practice.
- Iterative
Progress almost always happens iteratively. Don’t aim for perfection unless the cost is too high such as while landing a plane (in which case you shouldn’t have tried it in the first place). - Patience
Getting results or developing proficiency takes time even if you think you are doing everything right. Being patient is the single most important thing in such a case. And also the toughest for me personally. This realisation has helped me a lot - Perseverance
The other reason for giving up is usually when you are stuck or if you keep getting wrong or unsatisfactory results. This should be treated as part of the learning process. - Doing different things helps you make new mental connections. You start seeing how problems in very different domains are the manifestation of some more general process.
Example - The process of iterative improvement mentioned above works in programming, standup comedy, writing, learning to play a song, coming up with a business model and a lot of other things. What varies is how you can best define an iteration, measure its output and determine the change that has to be made. - Different things are different. This is a corollary to the previous point. While you can draw similarities between different pursuits, you also appreciate the specialised skill required in each task individually. Points 8 and 9 have made me appreciate people who are decently proficient in multiple skills in addition to their main one.
- Enjoying the process
You could keep at a task if the end goal is something that has deep value for you, which is often called passion. Finding such an end goal is rare. A better indicator of what you must do in life is whether you enjoy the day to day process of doing that thing. This requires experimentation before you can zero in on any one thing. Or you may continue doing multiple things and that is fine.
General life gyaan
- It’s better to take chances than not. Especially when the downside is non-fatal. All good things come from taking risks. I landed my current job through a mail that I had been really hesitant to send. However, once I did overcome my second guessing, the whole process got over in a matter of one working day.
- Financial security helps. While money is not the most important thing in the world, having savings does unconstrain you from what you can and cannot do.
The best thing you can do for yourself is find a source of passive income early in life. - Getting out of an institutional mindset. I have mentioned above how I first planned on and then rejected the idea of going for a masters. After comparing my time in college and then outside it, I realised that most of what makes me happy today was learned in the latter phase. The one big advantage of going to college is being around smart, energetic people. I am trying to make up for that through Twitter and attending meetups. Obviously, not a like for like replacement. But it also means I am unconstrained by school curriculum, demands of professors, and student loans. So I am prepared for a life of autodidacts at least for the next few years.
- The temptation to give in to passive consumption is real and very strong. Be it the passive consumption of information through Facebook, Twitter and the lot or of entertainment through the sundry streaming services or of food via delivery apps. I need to be forever vigilante against it as it affects my decision making in insidious ways that I know I’ll regret later.
- All the points above have a common theme and that is individual freedom. I have realised that freedom is the most important thing for me. It has also begun to inform my political views and life decisions in a major way.
What could have I done differently ?
- Been more thrifty with money
I did not cut down on my lifestyle even without a job. While I still had some savings, this prompted me to take up a job faster than I would have liked to - Avoid Passive consumption
I spent considerable time neither doing anything productive nor completely chilling out. Often on my trip I would find myself scrolling through a Facebook feed. This is something I won’t like to happen again. - Exercise
As already mentioned this was a failure. I have realised that I cannot exercise in a controlled environment like a gym. Instead, I would prefer playing a sport or doing manual labour to some end. Once I get over my injury, I will work on this. - Be more social
Oftentimes, I go into anti-social phases when I keep to myself and don’t talk to people. These can last for weeks at end. If I go to a new place in the midst of such a phase, I may not get along with the people ever. This sort of happened to me a lot of times during the break. - Started up
I did not startup. I really wanted to but I did not. I could not find a problem worth solving with a solution that I thought had novelty. This is obviously not the end of the road and I will get back to it again in the future. - Be more focussed in doing what I was doing
This follows from point 2. Passive consumption can lead to a kind of anxiety and indecision about what you want to do. Or rather passive consumption can help you fill in for the anxiety that comes with making decisions about what you want to do. Need to keep working on this without lapse. - Travel more - backpack in the true sense
Apart from the Western Ghats trip, I only made a couple of short trips during this time. I should have allocated time better to this. Again, something I’ll work on. - Invested in cryptocurrencies earlier
Haha. Everyday I wasted thinking about this and not doing was money wasted. Please go and invest.
Will I do it again ?
Yes!
I have decided to take a break every 2 or 3 years. This should help in assessing my life and career periodically. This should also help in trying new things and changing career tracks.


This is a base class for graphics applications built on top of the GLUT and GLUI toolkits. GLUT and GLUI are C libraries, so one function of this class is to wrap the funcationality they provide in a class structure that lends itself to C++. To receive callbaks from GLUT and GLUI that allow you to render graphics and respond to user interface events, simply override the virtual methods in this class within your own subclass.
More...
|
|
| BaseGfxApp (int width, int height) |
| |
|
virtual void | Init (int argc, char *argv[], int x, int y, unsigned glut_flags, bool create_glui_win, int glui_win_x, int glui_win_y) |
| | Initialize the the application. This is separate from construction, which is only intended to put the object in a valid state. If you override this, be sure to still call the super class version.
|
| |
|
void | set_caption (const std::string &caption) |
| | Set the window/icon title for the application.
|
| |
|
void | SetWindowDimensions (int width, int height) |
| | Set the dimensions of the application window.
|
| |
|
void | RunMainLoop (void) |
| |
|
virtual void | Display (void)=0 |
| |
|
void | DrawPixels (int start_x, int start_y, int width, int height, void const *const pixels) |
| | Draw an array of pixel data on the screen.
|
| |
| virtual void | Update (int delta_time_ms) |
| | Redraw the screen. More...
|
| |
|
virtual void | MouseMoved (int x, int y) |
| | Callback for mouse moving interface event in the GLUT window Note that (0,0) is in the lower right corner of the image, (this is what is returned from GLUT), which is NOT the same as the coordinate system definition for the PixelBuffer class. Your implementation will need to account for this.
|
| |
|
virtual void | MouseDragged (int x, int y) |
| | Callback for mouse dragged interface event in the GLUT window.
|
| |
|
virtual void | LeftMouseDown (int x, int y) |
| | Callback for left mouse click interface event in the GLUT window.
|
| |
|
virtual void | LeftMouseUp (int x, int y) |
| | Callback for left mouse click release interface event in the GLUT window.
|
| |
|
virtual void | RightMouseDown (int x, int y) |
| | Callback for right mouse click interface event in the GLUT window.
|
| |
|
virtual void | RightMouseUp (int x, int y) |
| | Callback for right mouse click release interface event in the GLUT window.
|
| |
|
virtual void | MiddleMouseDown (int x, int y) |
| | Callback for middle mouse click interface event in the GLUT window.
|
| |
|
virtual void | MiddleMouseUp (int x, int y) |
| | Callback for middle mouse click release interface event in the GLUT window.
|
| |
|
virtual void | Keyboard (unsigned char c, int x, int y) |
| | Callback for keyboard key press interface event in the GLUT window.
|
| |
|
virtual void | KeyboardSpecial (int key, int x, int y) |
| | Callback for keyboard special key press interface event in the GLUT window.
|
| |
|
virtual void | KeyboardUp (unsigned char c, int x, int y) |
| | Callback for keyboard key press release mouse moving interface event in the GLUT window.
|
| |
|
virtual void | KeyboardSpecialUp (int key, int x, int y) |
| | Callback for keyboard special key press release interface event in the GLUT window.
|
| |
|
virtual void | GluiControl (int control_id) |
| | Callback that tells you when the user has interacted with a GLUI widget.
|
| |
|
virtual void | Reshape (int width, int height) |
| | resize the graphics window on the screen. GLUT calls this when the user resizes the graphics window by dragging on it with the mouse. The default implementation in BaseGfxApp is to ignore this interaction and force the window to remain the same size. But, if desired, subclasses can override this method and implement the logic to allow for interactive resizing of windows.
|
| |
|
virtual void | RenderOneFrame (void) |
| | Clear the screen and call display(). Subclasses would only need to override this method if they need direct control over clearing the the screen, which is usually not the case.
|
| |
| int | width (void) const |
| | Get the width of the application. More...
|
| |
| int | height (void) const |
| | Get the height of the application. More...
|
| |
| int | handle (void) |
| | Get the handle for the GLUI window. More...
|
| |
| GLUI * | glui (void) |
| | Get the handle for the GLUI. More...
|
| |
|
| static void | s_reshape (int width, int height) |
| |
|
static void | s_keyboard (unsigned char c, int x, int y) |
| |
|
static void | s_keyboardspecial (int key, int x, int y) |
| |
|
static void | s_keyboardup (unsigned char c, int x, int y) |
| |
|
static void | s_keyboardspecialup (int key, int x, int y) |
| |
|
static void | s_mousemotion (int x, int y) |
| |
|
static void | s_mousebtn (int b, int s, int x, int y) |
| |
|
static void | s_draw (void) |
| |
|
static void | s_gluicallback (int control_id) |
| |
|
static void | s_idle (void) |
| |
This is a base class for graphics applications built on top of the GLUT and GLUI toolkits. GLUT and GLUI are C libraries, so one function of this class is to wrap the funcationality they provide in a class structure that lends itself to C++. To receive callbaks from GLUT and GLUI that allow you to render graphics and respond to user interface events, simply override the virtual methods in this class within your own subclass.


RT @existentialcoms: Philosophy is important because without it we could never know whether or not it was possible to know if you really kn…
12/7/2016, 7:45:41 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
RT @existentialcoms: Philosophy is important because without it we could never know whether or not it was possible to know if you really kn…
12/7/2016, 7:45:41 PM
Favs: 0
Retweets: 0
link


The amazing containerd API
and the most beautiful, too!
Current Namespace:
Pull new Image:
Pull
Local images
Reload image list
no images yet
Local containers
Reload container list
no containers yet
Local tasks
Reload task list
no tasks yet


{% import 'includes/filters/filter-variables.j2' as vars %}
{% with key='JSONPath-filter' %}{% include "includes/help.html" %}{% endwith %}
Extract a value from a JSON expression in a cell using a JSONPath expression.
{% include 'includes/filters/label-field.html' %}
{% set name='jsonpath-path%02d' % n %}


customizeBoard Information Report
Contents
Contents
Board Specification
General
Routing
Routing Information
Layer Information
Layer Information
Drill Pairs
Board Holes
Non-Plated Hole Size
Plated Hole Size
Board Slots
Non-Plated Slot Size
Plated Slot Size
Board Square Holes
Non-Plated Square Hole Size
Plated Square Hole Size
Other
Top Layer Annular Ring Size
Mid Layer Annular Ring Size
Bottom Layer Annular Ring Size
Pad Solder Mask
Pad Paste Mask
Pad Pwr/Gnd Expansion
Pad Relief Conductor Width
Pad Relief Air Gap
Pad Relief Entries
Via Solder Mask
Via Pwr/Gnd Expansion
Track Width
Arc Line Width
Arc Radius
Arc Degrees
Text Height
Text Width
Net Track Width
Net Via Size
Board Specification
Back to top
Routing
| Routing Information |
| Routing completion |
100,00% |
| Connections |
1596 |
| Connections routed |
1596 |
| Connections remaining |
0 |
Back to top
Layer Information
| Layer |
Arcs |
Pads |
Vias |
Tracks |
Texts |
Fills |
Regions |
ComponentBodies |
| Top |
2620 |
1735 |
0 |
5077 |
1 |
0 |
3928 |
0 |
| Ground Plane 1 (GND) |
0 |
0 |
0 |
42 |
1 |
0 |
4 |
0 |
| IN1 |
1202 |
0 |
0 |
2030 |
1 |
0 |
570 |
0 |
| IN2 |
1503 |
0 |
0 |
1842 |
1 |
0 |
258 |
0 |
| Power Plane (3V3) |
0 |
0 |
0 |
192 |
1 |
0 |
10 |
0 |
| IN3 |
1050 |
0 |
0 |
1337 |
1 |
0 |
195 |
0 |
| Ground Plane 2 (GND) |
0 |
0 |
0 |
46 |
1 |
0 |
5 |
0 |
| Bottom |
595 |
536 |
0 |
1505 |
1 |
0 |
569 |
0 |
| Mechanical 15 |
12 |
0 |
0 |
642 |
0 |
0 |
0 |
0 |
| Mechanical 14 |
58 |
0 |
0 |
747 |
0 |
0 |
0 |
0 |
| Mechanical 13 |
1 |
0 |
0 |
336 |
101 |
0 |
0 |
111 |
| Mechanical 8 |
80 |
0 |
0 |
857 |
112 |
0 |
0 |
0 |
| Mechanical 4 |
7 |
0 |
0 |
614 |
146 |
0 |
0 |
0 |
| Mechanical 3 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
280 |
| Mechanical 1 |
0 |
0 |
0 |
5 |
1 |
0 |
0 |
0 |
| Multi-Layer |
0 |
114 |
3017 |
0 |
0 |
0 |
1 |
0 |
| Drill Guide |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
| Keep-Out Layer |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
| Drill Drawing |
7 |
0 |
0 |
120 |
172 |
0 |
0 |
0 |
| Top Paste |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
| Top Overlay |
112 |
0 |
0 |
725 |
563 |
0 |
1 |
0 |
| Top Solder |
0 |
0 |
0 |
0 |
1 |
85 |
0 |
0 |
| Bottom Solder |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
| Bottom Overlay |
10 |
0 |
0 |
191 |
286 |
0 |
0 |
0 |
| Bottom Paste |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
| Total |
7257 |
2385 |
3017 |
16308 |
1394 |
85 |
5541 |
391 |
Back to top
| Drill Pairs |
Vias |
| Top - Bottom |
2818 |
| Top - IN1 |
161 |
| IN1 - IN3 |
38 |
| Total |
3017 |
Back to top
Board Holes
Back to top
Back to top
Board Slots
| Non-Plated Slot Size / Length |
Pads |
| Total |
0 |
Back to top
| Plated Slot Size / Length |
Pads |
| Total |
0 |
Back to top
Board Square Holes
| Non-Plated Square Hole Size |
Pads |
| Total |
0 |
Back to top
| Plated Square Hole Size |
Pads |
| Total |
0 |
Back to top
Other
Back to top
Back to top
Back to top
Back to top
| Pad Paste Mask |
Count |
| -0.51mm
|
2 |
| 0mm
|
2383 |
| Total |
2385 |
Back to top
| Pad Pwr/Gnd Expansion |
Count |
| 0.2mm
|
2385 |
| Total |
2385 |
Back to top
| Pad Relief Conductor Width |
Count |
| 0.254mm
|
2385 |
| Total |
2385 |
Back to top
| Pad Relief Air Gap |
Count |
| 0.254mm
|
2385 |
| Total |
2385 |
Back to top
| Pad Relief Entries |
Count |
| 4 |
2385 |
| Total |
2385 |
Back to top
| Via Solder Mask |
Count |
| 0.05mm
|
3017 |
| Total |
3017 |
Back to top
| Via Pwr/Gnd Expansion |
Count |
| 0.2mm
|
3017 |
| Total |
3017 |
Back to top
Back to top
Back to top
Back to top
| Arc Degrees |
Count |
| 16 |
20 |
| 40 |
28 |
| 42 |
4 |
| 44 |
8 |
| 58 |
4 |
| 84 |
20 |
| 90 |
6942 |
| 91 |
20 |
| 132 |
5 |
| 180 |
38 |
| 352 |
1 |
| 360 |
167 |
| Total |
7257 |
Back to top
Back to top
Back to top
Back to top
| Net Via Size |
Count |
| 0.4mm
|
438 |
| Total |
438 |
Back to top


We are sorry but the sequencing data was insufficient for us to determine your result.
We take great pride in providing accurate results to our customers. Our system has automatically notified us of this issue. Please contact us and we will try to help you and answer your questions regarding your results.


---
output:
pdf_document:
latex_engine: pdflatex
keep_tex: false
dev: cairo_pdf
template: svm-latex-resume.tex
title: "Résumé"
author: "Annelise Koster"
date: "8/31/2020 -- Update before applying"
fontawesome: TRUE
# geometry: margin=1in
geometry: "top=.5in, left =.5in, right=.5in, bottom=.75in"
# How can we get a hold of you?
email<EMAIL_ADDRESS>phone:<PHONE_NUMBER>
location: "Fayetteville, AR"
github: ak031
web:
twitter:
linkedin: "annelise-koster"
mainfont: cochineal
sansfont: Fira Sans
# monofont: Fira Code # I want to use this, but seems to choke on @
urlcolor: blue
fontsize: 11pt
includephoto: TRUE
myphoto: Annelise-Koster.jpg
# shift: "7in,-.25in" # this is default
photobigness: 1.75cm
# photozoom: ".2\textwidth" # this is default
---
Professional Experience
University of Arkansas - Resident Assistant
Assist with the planning, implementation and evaluation of residence hall events
Attend, participate and contribute to weekly staff meetings
Perform several administrative duties, including room inspections, writing incident reports and submitting maintenance requests
Enforce and implement university and campus policies
Advise residents on academic and personal concerns
Kanakuk - Dining Hall Staff
Prepped and cleaned the dining hall and kitchen as well as served meals to 400+ people each day
Coordinated the salad bar - organizing with the cooks to ensure we had enough produce, stocking and cleaning the salad station and training new staff on how to run the salad bar
ARK Trading - Procurement Coordinator
Grew electrical department sales by over 200% by expanding and optimizing the product range
Purchased and managed $100,000 USD in inventory, while negotiating deals, promotions and discounts with suppliers
Maintained the department’s pricing and mark-ups
Crete Gymnastics Club - Coach
Coached gymnasts aged 8-17
Developed daily, weekly and monthly training programs for girls in the national team development squad
Organizations
Honors Student Executive Board
Analyze, critique and offer suggestions for changes and improvements that could be made to the Walton Honors Program
Responsible for helping to plan virtual interactive events
Education
Undergraduate Program
Bachelor of Science in Data Science with a Business Data Analytics Concentration
- expected May 2023
- GPA 4.0
Projects
NSF EPSCoR Track 1 Undergraduate Research Assistantship Fellow
Help increase the extent of data science education in Arkansas
ARK Trading - Customer Service Intern
Researched, configured and customized a system to measure key performance metrics such as number of customers helped, wait times and service times to allow ARK Trading to gather data to increase the efficiency of their order fulfillment as well as their deliveries
Doug McMillion Innovation Studio
Used rapid prototyping, lean canvas methodology, and design thinking to develop an idea that would decrease reverse logistics for clothing retailers
Created a prototype of an app - Perfit
Languages and Awards
Chancellor’s List (2018-2020)
Sportswoman of the Year - Namibian Gymnastics Federation


Methods
analyseLabStructure()
Analyse the structures of labs.
- Source:
run()
Run.
- Source:
scanContainer()
Scan the containers and mount to the global.info.containers.
- Source:
scanLab()
Scan the labs and mount to the global.info.labs.
- Source:
scanLink()
Scan the links and mount to the global.info.links.
- Source:
scanRepairTarget()
Scan the need-repair targets of tower-standard and mount to the global.info.repairTargets.
- Source:
scanResource()
Scan the resource info and mount to the global.info.resources.
- Source:
scanRoom()
Scan the room and mount to the global.info.rooms.
- Source:


Everyone
Everyone learns in different ways and POWS is a resource for teachers to help them teach in different ways.
Lots of research has been done into the different ways people learn and these have been called learning styles.
Everyone learns in different ways and POWS is a resource for teachers to help them teach in different ways.
Lots of research has been done into the different ways people learn and these have been called learning styles.
Most people like to learn using a combination of learning styles, to illustrate this I'm going to introduce you to four learners.
Tanu is a visual learner.
She spends most of her day imagining and thinking in pictures.If she wants to communicate an idea she would rather draw a diagram or sketch a solution.
Tanu likes to take notes, she finds this helps her to remember what someone has said, sometimes she makes mind maps and other times she writes in lists.
If Tanu has a lot of information to remember she finds it easier to associate the information as part of a journey so she can visualise it all in her minds eye.
Eric is verbal learner.
He spends most of his day talking and listening. If he wanted to communicate an idea he would enjoying explaining and discussing.
Eric likes to watch videos or listen to Podcasts and finds it easy to remember what has been said.
If Eric needs to remember lots of information he uses a tape recorder to talk to himself and listen back to it later.
Oni is a kinesthetic learner.
She spends most of her day doing things. If she wanted to communicate an idea she would show you how to do it. Oni likes to physically do things and have a go for herself.
Oni finds that taking notes and doodling helps her remember but best of all physically being in a practical environment.
If Oni has a lot to remember she prefers to have hands on experience with the information.
Jian is a contextual learner.
He spends most of his days talking to people and doing activities. If he wanted to communicate an idea he would give you a real world example.
Jian likes things to make sense and to fit into his understanding of the world. He finds that by understanding where new information fits into what he already knows, it helps him to remember.
If Jian has a lot of information to remember he prefers to role play and act out a real world example.
Learning Theories are the academic research that has lead to the definition of learning styles.
VAK stands for: Visual, Auditory and Kinesthetic.
These are the 3 most common ways that people learn. The model was developed in the 1920's by psychologists to classify how people learn assigning a person to one of these categories.
A spin of from VAK was VARK which added in Reading/Writing.
ELPS stands for: Experience (with objects), Language (describe an experience), Pictures and Symbols.
The model was developed in the 1980's to explain how to teach mathematics. As mathematics was seen to be a hard subject for some children to grasp due to its abstract nature.
ELPS builds upon the idea that you need to show the same information in lots of different ways in order for it to be understood.
CPA stands for: Concrete, Pictorial and Abstract.
This model developed by J.Bruner explains that in order to understand an abstract concept you first have to introduced to it as something concrete i.e. a real world example.
Once you understand the real version you can describe the information through pictures, one step towards abstraction, and then through symbols.
For example, to introduce the concept of the number 10 I would show you ten physical objects (Concrete), then draw you 10 circles (Pictorial), and then right the digits 1 and 0 to represent the number 10 (Abstract).

This model was introduced by Riding and Ranger in 1998 and explores how people process information: in parts (Analyst) or wholes (Wholist) and how they represent information, visually (Imager) or verbally (Verbaliser).
A Wholistic Imager is likely to want to see the big picture in a visual way before looking into the details.


Enter the name and the stats of each player
Player name:
Accuracy in short passes (%)
Accuracy in long passes (%)
Accuracy in take-ons (%)
This player use to play next to his/her teammates and help them in the teamwork passing?
This player has a good capacity of changing of direction?
This player has a good capacity to shield the ball and resist the adversary's pressing?
This player has a good ball handling?
Enter the name and the stats of the most recent team mannaged by the coach
Coach name:
What is the Possession percentage of the most recent team mannaged by the coach?


home
archive
category
about
forgeting behind and looking foward!
两张图了解linux IO子系统
Aug 17, 2015
来源:
www.ilinuxkernel.com
图1
图2


Classes
The following classes are available globally.
-
Table View with results from remote search It is created programmatically
See moreDeclaration
Swift
class SuggestionsViewController: UITableViewController
-
Custom Cell for Hero Detail view Collection View of Comics
See moreDeclaration
Swift
class ComicCell: UICollectionViewCell
-
Parses JSON files
See moreDeclaration
Swift
class parser: NSObject
Parameters
data
Needs to be initialized with a Dictionary
-
Custom Cell for Master table view
See moreDeclaration
Swift
class HeroCell: UICollectionViewCell
-
Visible Interface for the View Controllers Behind it there are other files that are not accessible for them
See moreDeclaration
Swift
class apiClient: NSObject
-
Custom Cell for Suggestions table view
See moreDeclaration
Swift
class suggestionCell: UITableViewCell
-
Detail View for Hero Includes a Collection View with Comics
See moreDeclaration
Swift
class HeroDetailVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UIScrollViewDelegate
-
Holds Character entity information. Called hero for simplicity
See moreDeclaration
Swift
class Hero
-
Collection View with Hero objects
See moreDeclaration
Swift
class MasterViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UISearchBarDelegate, UISearchResultsUpdating, UISearchControllerDelegate
-
Undocumented
See more
-
Responsible of managing network and local cache of images and JSON files Works together with the parser class to serialize objects from JSON.
See moreDeclaration
Swift
class PersistencyManager: NSObject


Complete list of FUSS class extensions
Fuss extensions using classes, e.g. in HTML use blah, blah etc.
| Class | Example | Purpose |
| button |
BUTTON
BUTTON
| button classes (button, button-green) |
| code | IF X<50 THEN... | to make code stand out using a fixed-width font |
| kbd | press P to continue | Looks like a single keyboard key |
| kbd combo | press CTRL+K to continue | keyboard keys combination |
| quote | "I said something and got quoted" | Handwriting style quote |
| well | see below | Information well |
CSS layout for a 'Well' (generic information box). Set at 78% of width in CSS with a 10% margin & justified text


Author:
zmcx16
Illustrator:
超愛喝榛奶
Contact:
<EMAIL_ADDRESS>Open Source:
MangaPrettier
Blog:
zmcx16's Blog
Support:
Donate zmcx16
©zmcx16 All rights reserved.


LIVE LONG HOSPITAL Hospital is a multi/super speciality hospital located at the prime location of Ranchi Circle, MG Road, Jharkhand; with state-of-the-art facilities & treatments at an affordable cost, encompassing wide spectrum of accurate diagnostics and elegant therapeutics created on the philosophical edifice of patient and ethical centricity ensuring humanistic dispensation.
As a leading health organization in our region, we want to be a strong influence for better health and prevention, and there’s no better place to start than among our own employees.
CEO Dr.Prity Mehta
Ensuring ‘well being’ as a humane commitment to
enliven humanity.
The ‘well being’ ensured by extension of Available, Accessible, Affordable, Safe, Efficacious, Professional
And Ethical.
Team Work, Integrity, Responsibility, Compassion,
And Ethics.
LIVE LONG HOSPITAL is spread over a massive 6 acre campus
providing 300+ beds and catering for nearly 45 super-specialties.
The department of cardiology atLIVE LONG HOSPITAL comprises of top cardiac experts who have appreciable experience in dealing with various types of cases in the cardiology and perform accurate diagnosis
The dermatology department of LIVE LONG HOSPITAL consists of a team of dermatologists and staff who are practicing in the field of dermatology and cosmetology for years and perform their best to treat the patients.
 Holistic care is ensured by our team of critical care experts who use a multidisciplinary approach.
At LIVE LONG HOSPITAL, we have a team of experienced general surgeons who possess the skills to carry out the most complex surgeries.
LIVE LONG HOSPITAL provides health check up packages in Jharkhand at very affordable price. As we aim at imbibing hope, health, and happiness in the community at large, our health check up packages in Jharkhand help in early diagnosis.
The team at the Neurology department of LIVE LONG HOSPITAL comprises of highly-trained, skilled, and well-experienced team of Neurologists, Neurosurgeons, interventional radiologists, Neurophysiotherpists and rehabilitation teams who make sure that the patients receive the best quality treatments.


What is a virtual DOM?
The Virtual DOM is an in-memory tree representation of the browser's Document Object Model. React's philosophy is to interact with the Virtual DOM instead of the regular DOM for developer ease and performance.
How does the virtual DOM and the DOM interact?
By trading off the additional memory requirements of the Virtual DOM, React is able to optimize for efficient subtree comparisons, resulting in fewer, simpler updates to the less efficient DOM.
What is the upside to the additional memory requirements using the virtual DOM?
By trading off the additional memory requirements of the Virtual DOM, React is able to optimize for efficient subtree comparisons, resulting in fewer, simpler updates to the less efficient DOM.
The result of these tradeoffs is improved performance.
What is a key aspect of the React philosophy?
Thinking about how the UI should look at any given moment, rather than how to change it over time, eliminates a whole class of bugs.
How is every virtual DOM node eventually constructed?
Eventually every virtual DOM note is constructed using the React.createElement function.
How many arguments does the React.createElement function take?
Create the following structure using React.createElement:

Pets

Owners

React.createElement(
'ul',
null,
React.createElement(
'li',
{ className: 'selected' },
React.createElement('a', { href: '/pets' }, 'Pets' ),
),
React.createElement(
'li',
null,
React.createElement('a', { href: '/owners' }, 'Owners' ),
),
);
How do you render an object with React?
ReactDOM.render(
component, //The react component to rendertarget // the browser DOM node to render it to
);
Using react, render the component named App to the DOM node 'root'
ReactDOM.render(
<App />,
document.getElementById('root')
);
Render the same element as above, using strict mode
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
How would you construct virtual DOM nodes using HTML-like syntax?
Using JSX
What is JSX?
JSX is a special format to let you construct virtual DOM nodes using familiar HTML-like syntax. You can put the JSX directly into your .js files, however you must run the JSX through a pre-compiler like Babel in order for the browser to understand it.
What do you need to use in order for the browser to understand JSX?
Using Bable, the JSX code is compiled to a series of recursively nested createElement calls, rather than <elt> JSX syntax.
You're given an array of cards containing name, imgUrl, and content. What are the 3 steps you need to take to render these cards?
const rootDiv = document.getElementById("root");
const cards = [
{
name: "Martok",
imgUrl: "http://guide.fleetops.net/images/avatars/martok.png",
content: "Ferocious Klingon"
},
{ name: "Mijural",
imgUrl: "http://guide.fleetops.net/images/avatars/mijural.png",
content: "Shrike Class Romulan"
}
]
ReactDOM.render(
<StarTrekCardDeck cards={cards} />,
rootDiv
)
const StarTrekCardDeck = (props) => {
return (

//Here we are mapping the cards into <StarTrekCard> components
{props.cards.map(card =>
<StarTrekCard
imgUrl={card.imgUrl}
content={card.content}
key={card.name} />
)}

);
}
const StarTrekCard = (props) => {
return (

{props.content}

);
}
What is the command to create a React project named "my-app-name"?
npx create-react-app my-app-name
Name the two folders that have files we don't typically needd:
Name the files in the public folder that we don't need
public folder:
Name the files in the src folder we don't need
src folder:
What files do you need to modify after deleting the files from public and src?
Any files that reference the deleted files.
Also, index.html can be replace with a boilerplate HTML file.
When you modify index HTML to the boilerplate file, what do you need to remember to do?
Add a div with an id of 'root' you will use in your ReactDOM.render() call;
How would you create a custom react app from aA's custom template?
npx create-react-app my-app-name --template @appacademy/simple
Using ES2015 class syntax, describe the file contents if the class is named "Hello"
You need to import React, extend the class using React.Component, use the render() {} function, and export default Hello;
import React from 'react'
class Hello extends React.Component {
constructor() {
super();
this.state = {
name: this.pickRandomName();
}
}
pickRandomName() {
const randomNum = Math.floor(Math.random() * 3);
const names = ['LeBron', 'Messi', 'Serena']
return names[randomNum];
}
changeName = () > {
this.setState({
name: this.pickRandomName()
});
}
render() {
return (
<>
<h1j>Hello {this.state.name}!

<button onClick={this.changeName}>Change name</button>
</>
)
}
}
export default Hello;
How would you initialize a state within a class component?
class extends React.Component(
constructor() {
super();
this.state = {
name: '',
email: '',
password: ''
}
}
Where should you NOT update state?
Any instance method except for render()
How would you update the state of an email address entered in your form?
handleEmail = (e) > {
this.setState({
email: e.target.value
});
}
How would you provide default values for a class component's props?
Place this right before your export:
Books.defaultProps = {
books: [
{title: "Don Quixote", author: "Miguel De Cervantes"},
{title: "Pedro Paramo", author: "Juan Rulfo"}|
]
};
In a form, how would you add event listeners?
render() {
return (
<form onSubmit={this.handleSubmit}>
<input type="text" value={this.state.value}/>
<button>Submit!</button>
</form>
)
}
How do you prevent event default behavior?
handleSubmit = e > {
e.preventDefault();
const inputVal = this.state.value;
}
Can you pass a function through props?
Yes!
How would you call the function passed through props?
this.props.submitForm(inputVal)
What are two ways we can safely use "this" keyword within event handlers?
changeEmail = e =>{
this.setState({
email: e.target.value
});
constructor() {
super();
this.state = { email: ''};
this.changeEmail = this.changeEmail.bind(this);
}
Describe what the React SyntheticEvent object is?
The SyntheticEvent object mimics the characteristics of the event passed to the callback in an event handler but adding more data to it.
What is a Synthetic Event?
Your event handlers will be passed instances of SyntheticEvent, a cross-browser wrapper around the browser's native event. It has the same interface as the browser's native event, except the events work identically across all browsers.
What are two of the interfaces SyntheticEvent provides similar to your browser's native event?
stopPropagation()
and preventDefault()
Create a React class component containing a form with one input area, a button named "Submit", a submit callback named handleSubmit, and a callback on the input the sets the value and calls handleResponse when the value of the input box changes.
class Simpleform extends React.Component { constructor() { super(); this.state = { response: '' } } handleResponse = e => { this.setState({ response: e.target.value }); } handleSubmit = e => { e.preventDefault(); this.props.submitForm(this.state.response); } render() { return ( <form onSubmit={this.handleSubmit}> <input onChange={this.handleResponse} type="text" value={this.state.response} /> <button>Submit</button> </form> ); } }
Define a single event handler method to handle onChange events for multiple "input" elements.
onChange = (e) => {
const { name, value } = e.target;
this.setState( { [name]: value });
}
render() {
return(
<form onSubmit={this.onSubmit}>
<input
onChange={this.onChange}
name='email'
type="text"
value{this.state.email}
/>
<input
onChange={this.onChange}
name='password'
type='text'
value={this.state.password}
/>
<button>Submit</button>
</form>
);
}
Add a "textarea" element to a form
The textarea element in React uses a value attribute instead of inner content. It is handled the same way you would handle an input element. It will be a self-closing tag;
Normal html:
<textarea>This is the text that goes in the text area.</textarea>
However, in React, the text goes in a value attribute, and the element is self-closing
<textarea value={this.state.text} onChange={this.onChange} />
How do you write a select element on a form?
<select name='timezone' onChange={this.onChange} value={this.state.timezone}>
<option>PST</option>
<option>CST</option>
<option>EST</option>
</select>
What steps might you take to validate input?
validate(spiritAnimal) {
const validationErrors = [];
if (!spiritAnimal) {
validationErrors.push('Please provide a spirit animal');
}
return validationErrors;
}
onSubmit = e => {
e.preventDefault();
const { spiritAnimal } = this.state;
const validationErrors = this.validate(spiritAnimal);
if (validationErrors.length > 0) {
this.setState( {validationErrors});
} else {
this.props.submitForm(spiritAnimal);
this.setState({spiritAnimal: ''});
}
}
Describe the lifecycle of a React component
Describe the steps when the React component is added to the virtual DOM:
Describe the events when a React component is updated.
When does the componentWillUnmount method get called?
Just before a React component gets removed from the virtual DOM.
Should you fetch data from within the constructor?
No! Use componentDidMount instead.
How would you fetch data?
Use the componentDidMount() lifecycle event.
componentDidMount() {
fetch(url)
.then(response => response.json())
.then(data => this.setState( { movieInfo: data} ));
}
What steps do you need to take to use the react router?
npm install --save<EMAIL_ADDRESS>import { BrowserRouter } from 'react-router-dom';
How many child components can BrowserRouter have?
Only ONE
How do you circumvent the constraint on child components for BrowserRouter?
Use a div tag to surround your components to be controlled by the Router, including the Route tag
import { BrowserRouter } from 'react-router-dom';
const App = () => {
return (
<BrowserRouter>

 //Note that BrowserRouter can only have a single child Component!
//Include components here you want to be controlled by the Router, including
//the <Route> tag

</ BrowserRouter>
);
};
What arguments does a <Route>
component take?
:
character.
<Route path='/users/:userId' />
<Route path='/users/:userId/stores/:storyId'/>
history
location
and
match
properties. /users/1
this will render the Component
UserProfile
:
<Route path='/users/:userId' component={UserProfile} />
component
this will cause a component to render, you can
pass
this an arrow function that renders multiple components. Usually we use this so we can pass custom
props to the component. Using the component
tag doesn't let us do this.In your route, suppose you want to pass an extra prop called "token" to the user Profile page. How would you do this?
We can do it but we need to pass the regular props from <Route>
as well by using the
spread operator: {...props}
.
<Route
path='/users/:userId'
render={props => <UserProfile {...props} token={token} }/>
What package would you need to generate navigation links?
npm install react-router-dom
then include it by require Router from
'react-router-dom';
What does Link
render?
Link
renders an anchor tag
that when clicked,
changes the window.location.href
to the url
What happens when you click on a simple Link
anchor tag?
Clicking on the a href link triggers BrowserRouter
to parse the url and look for matching
<Route>
components.
How would you write a simple Link
element?
<Link to="/">App</Link>
<Link to="/users">Users</Link>
<Link to="/users/1">Andrew's Profile</Link>
What's the difference between the <Link>
element and the
<NavLink> element?
They're identical except that <NavLink>
has a optional activeClassName
and activeStyle
props that will set a css class or css styles
<NavLink to="/">App</NavLink>
<NavLink activeClassName="red" to="/users">Users</NavLink>
<NavLink activeClassName="blue" to="/hello">Hello</NavLink>
<NavLink activeClassName="green" to="/users/1">Andrew's Profile</NavLink>
<NavLink to="/" onClick={handleClick}>App with click handler</NavLink>
By default, what does React Router Match for the url '/'?
<Route path='/' ... >
<Route path='/users' ... >
<Route path='/users/:userId' ...>
All of these routes!
What two ways can you make the <Route> match exact
paths?
exact
keyword<Switch>
component. How many <Route>
elements will match inside a switch
component?
Only one of the routes inside the component to be rendered at any given time.
Remember: the first route to match in a <Switch>
is the winner!
<Switch>
<Route path="/users/:userId" component={ (props) => <Profile ujsers={users} {...props} />} />
<Route exact path="/users" render={() => <Users users={users} />} />
<Route path="/hello" render={ () =>
Hello!
} />
<Route exact path="/" component={App} />
<Route render={ (J) =>
404: Page not found
} />
</Switch>
How would you access the router properties when you're inside a component?
Use the React Router match prop to access router parameters.
Given the following <Route>
:
<Route path='/users/:userId/stories/:storyId' component={UserStories}/>
If the url were /users/1/stories/2
then the props.match.params
inside of
UserStories
would look like:
console.log(props.match.params);
// Will log this:
// {
// userId: 1,
// storyId: 2
// }
How would you redirect your component to another url?
Use the props.history
prop that <Route>
sends to your component.
const redirect = () => this.props.history.replace('/some/other/url');
How would you enable the user to push the Back button in the browser to go back to the previous url?
Use the props.history
function that <Route>
sends to your component.
const handleClick = () => this.props.history.push('/some/url');
This pushes a new URL (and adds to the end of the history stack);
If you use the <Route>
history prop, and replace a url,
what
will the resulting history stack look like?
Using this.props.history.replace('/some/other/url')
will replace the current URL, but it
won't
be tracked in the history stack.
How would you redirect a user to a different URL, like for instance after they've logged in?
Use the <Redirect> component
<Redirect to="/">
What is a nested route?
A nexted route is when we use a <Route>
component inside a component that hasn't
been
rendered yet instead of creating them in your top level component directly under
<BrowserRouter>
.
Why would you use a nested route?
Nested routes allows us to keep those routes close to the components they render, and it means we are dynamically adding routes on the fly. For instance, if you have a component that renders more routes to their subcomponents, you might use a nested route.
//Destructure 'match' prop
const UserProfile = ( {match: { url, path, params } ) => {
//Custom call to database to fetch a user by a user ID.
const user = fetchUser(params.userId);
const { name, id } = user;
return (

Welcome to the profile of {name}!

{/* Replaced '/users/${id}' URL with 'props.match.url' */}
<Link to={'${url}/posts'}>{name}'s Posts</Link>
<Link to={'${url}/photos'}>{name}'s Photos</Link>
{/* Replaced '/users/:userId' path with 'props.match.path' */}
<Route path={'${path}/posts'} component={UserPosts} />
<Route path={'${path}/photos'} component={UserPhotos} />

}
);
};


{% extends "form_engine/base.html" %} {% load custom_filters %} {% block title %}{{ block.super }} | New Form {% endblock %} {% block content %}
Enter the necessary information for your form. After clicking on 'save' you will be taken to a new page where you can create a layout for your form.


As a Mage there is something different about you.  This is your Avatar and it came to you one dark night to led you towards answers you didn’t have the words to ask for. It showed you that your beliefs have the power change reality. It showed you how to make Magick.
Depending on the circumstances, Avatars can be subtle nudges and intuitions, a spiritual dissatisfaction, or a fully embodied presence dispensing obscure wisdom. Regardless of their form, avatars have a distinct nature, or personality, which can shape a mage in a similar way, or be something they are constantly fighting.
Dynamic avatars personify change and will push, prod, drag, and even trick Mages into seeking the new. Dynamic doesn’t always mean restless and wild, in fact few can concentrate more intensely then a Dynamic mage overtaken by a passion. This is an avatar of change, and change manifests new things.
Avatars of Pattern place value on caution, reason, and stability. They may sometimes be claustrophobic and resistant to even the most positive of change, but they are also solid and ever sound fortresses.
Less human and more cosmic, the primordial avatar is a shadow that lingers in your peripheral vision. A pool of dark water. A mystery. A horror.
This avatar is a yearning that comes from a deep place. It’s not a constant need to burn and change, but a more human need to adventure and explore and be part of the next story.


Layout & Type Ratios
Ratios are useful for both modular-scales and fluid media layouts. We’ve moved them into the core, as a common way of manipulating numerical data, on-par with function-calls.
$ratios (map)
scss
$ratios: () !default;
Define your own ratios,
or alias keys for built-in ratios.
Any ratios that resolve to linear
will not use any exponential scale.
Example
scss
$ratios: (
'line-height': (1 / 3),
'headings': 'linear',
'_golden': 1.61803399,
);
Related
Used By
@mixin add-ratios()
@function ratio()
Retrieve a scale ratio by name
from either the $_DEFAULT-RATIOS
or user $ratios
configurations.
Since 1.0.0
:
- NEW: Accepts
$do
map argument, for on-the-fly adjustments - NEW: Accepts
$source
map argument, for custom source-palette
Parameters & Return
$ratio: (string | number)
The key-name or value of a ratio
$do: null (map | null)
A map of function/ratio adjustments to run on the returned value
$source: $ratios (map)
Optional accoutrement-format map of ratios to use as the origin palette (in addition to the provided defaults)
@return (number)
The numeric value of a ratio
Example
scss
/* _octave: #{ratio('_octave')} */
/* _fifth: #{ratio('_fifth')} */
css
compiled
/* _octave: 2 */
/* _fifth: 1.5 */
@mixin add-ratios()
Parameters & Output
$maps: (map...)
Pass any number of maps to be merged.
{CSS output} (code block)
- An updated global
$ratios
variable, with new maps merged in.
$_a_RATIOS
scss
$_a_RATIOS: (
'_octave': 2,
'_major-seventh': (15 / 8),
'_minor-seventh': (16 / 9),
'_major-sixth': (5 / 3),
'_minor-sixth': (8 / 5),
'_fifth': (3 / 2),
'_augmented-fourth': (45 / 32),
'_fourth': (4 / 3),
'_major-third': (5 / 4),
'_minor-third': (6 / 5),
'_major-second': (9 / 8),
'_minor-second': (16 / 15),
'_photo': '#_fifth',
'_classic': '#_fourth',
'_widescreen': '#_minor-seventh',
'_cinema': 2.39,
'_golden': 1.618,
);
Some default named ratios you can use, but shouldn’t edit directly.


CONFIDENTIAL PARTHNERSHIP =============================== My name is Mr.Oluwatobi E.Boye, the manager, credit and foreign bills of Ecobank Plc. I am writing in respect of a foreign customer of my bank who perished in a plane crash [Korean Air Flight 801] with the whole passengers aboard on August 6, 1997. Since the demise of this our customer, I personally has watched with keen interest to see the next of kin but all has proved abortive as no one has come to claim his funds of usd.20.5 m, [twenty million five hundred thousand united states dollars] which has been with my branch for a very long time. On this note, I decided to seek for whom his name shall be used as the next of kin as no one has come up to be the next of kin and the banking ethics here does not allow such money to stay more than Six years, because money will be recalled to the bank treasury as unclaimed after this period. In view of this I got your contact through a trade journal after realizing that your name and country is similar to the deceased. I will give you 25% of the total. Upon the receipt of your response, I will send you by fax or e-mail the application, bank's fax number and the next step to take. I will not fail to bring to your notice that this business is hitch free and that you should not entertain any fear as all modalities for fund transfer can be finalized within five banking days, after you apply to the bank as a relation to the deceased. When you receive this letter. Kindly Call me on my private telephone number at:234-80-5507-1652 send me an e-mail signifying Your decision including your private Tel/Fax numbers for quick communication. Respectfully submitted, Oluwatobi E Boye. NB:I would appreciate if you reply me to my private mailbox for security reasons at:oluwatobiboye@justmailz.com


Security guidance
What is the security pillar?
The security pillar describes how to take advantage of cloud technologies to protect data, systems, and assets in a way that can improve your security. To give you an oversight of the pillar, we have included the seven design principles for security in the cloud below. For more information on the Security Pillar view the further resources.
Further security resources
Design principles
| Design Principle | Explanation |
|---|---|
| Implement a strong identity foundation | Identity, authentication and authorisation is highly important for access control and ensures that data remains protected |
| Enable traceability | The ability to audit and attribute actions within the cloud ensures that service and data security can be monitored |
| Apply security at all layers | Defence in depth approach increases difficulty of any attacks on the service |
| Automate security best practices | Automation allows repeatability and builds confidence in deployment – assessment of security benchmarks under Governance as Code approach |
| Protect data in transit and at rest | All data should be encrypted in transit across the cloud and all data should be encrypted at rest |
| Keep people away from data | Data should be protected from manual use and manipulation |
| Prepare for security events | Security breaches and incidents happen and preparation for these events can ensure that when then do occur they can be dealt with quickly and effectively and minimise any potential data loss or compromise of assets |
Considering the guidance from the security pillar of the Well Architected Framework, we have different sections that relate to security in the Home Office:
- Cloud responsibility model
- Long lived access keys
- How IAM works in the HO
- National Cyber Security Centre (NCSC) Cloud Security Principles
Cloud responsibility model
What is the cloud responsibility model?
Cloud Security is fundamentally based on what the major public cloud providers term as shared responsibility model (SRM) between customers and the cloud provider. All organisations using the cloud sign up to this model. The SRM defines who is responsible for what on the cloud. The model broadly divides responsibilities into "of" and "in". The Home Office has responsibility for the security in the cloud, this covers how we use the cloud. While the cloud provider has responsibility for the security of the cloud. The details of this model depend significantly on the type of service that you are using in the cloud, for example the Home Office has less responsibility over an Azure Function (the equivalent of AWS lambda) which is serverless compared to an AWS EC2 where everything accept the physical hardware, boot and storage is our responsibility.
Cloud Services
Cloud services can be generally split between Infrastructure, Platform or Software as a service.
- Infrastructure as a Service (IaaS) are services provided within the cloud means that the Home Office operates the infrastructure but do not control the physical infrastructure.
- Platform as a Service or Container Services (PaaS/CS) (Azure/AWS) are cloud provided services where the customer has fewer responsibilities to secure the service and AWS/Azure have greater responsibility for keeping services up to date. Cloud providers are responsible for the platform and application management as well as the security of the operating systems and networks (except for Firewall configuration, i.e. security groups which can be configured by the customer to lock down access to the service).
- Software as a Service or Abstract Services (SaaS/AS) (Azure/AWS) are cloud provided services where the customer has the fewest responsibilities to secure the service. The cloud provider is responsible for the security of network, platform, OS and infrastructure. The Home Office are responsible for managing who has access to the data and that we are using the encryption services. These responsibilities are split over several Home Office teams.
The functions within the model can be broken down to the following:
| Area of Responsibility | SaaS/AS | PaaS/CS | IaaS | Definition |
|---|---|---|---|---|
| Customer Data | HO | HO | HO | This is any data that the Home Office stores within AWS, i.e. an Immigration application, advanced passenger information. Under the Model this always remains the responsibility of the Home Office. The security of this data in the cloud is the responsibility of the portfolio using the cloud, however, other teams such as CSOC, platforms, public cloud, networks & infrastructure can assist by supporting security controls that allow more effective discharge of these responsibilities to mitigate the risks. |
| End-points & Devices | HO | HO | HO | These are equipment that the Home Office uses or are used by our customers to connect to Home Office services in the cloud. The security of these remain the responsibility of the Device Owner (i.e. EUC&C within DDAT ES, Supplier when using Supplier BYOCD or an individual in the case of our customers). It is the responsibility of the portfolio to ensure that their risk owners are content with any risks related to end points and devices. |
| Account Identities | HO | HO | HO | This is the identity used by HO users to access the public cloud. This is the responsibility of the public cloud team to manage on behalf of the Home Office. |
| Access Controls | HO | HO | HO | These include policies, roles and permissions. The HO organisational wide Access Controls are the responsibility of the public cloud team to implement, managing risk on behalf of the risk owners (and will be set with conversations with portfolios and OCISO). Portfolios (account owners) retain responsibility of access controls for any specific roles they create within their accounts. |
| Monitoring Usage and User Audit | HO | HO | HO | This includes system and protective monitoring of what services HO uses and an audit of which users have access to services. The responsibilities here sit across portfolios, CSOC and the public cloud team who can enable policies within the organisation to make this more straightforward. The business owner within the portfolio is responsible for how services are used. |
| Web Application Security | HO/CP | HO | HO | A broad term for the security posture of any web application deployed onto the public cloud. Responsibilities for web application security lie with the Home Office, with the exception of container services. |
| Deployment | HO/CP | HO | HO | The deployment of services used by HO in the cloud is generally the responsibility of individuals platforms and portfolios as this relates to their deployment of cloud services, and there are a range of deployment methodologies and tools in place within HO. The Public Cloud Team are responsible for the deployment of new accounts and new users. The Cloud provider is responsible for the deployment of most functionality in SaaS and particularly serverless use case. |
| Operations | CP | HO | HO | The operations of services used by the Home Office in the cloud, this is generally the responsibility of the platforms that use these services. |
| Access and Authentication into the Cloud | HO/CP | HO/CP | HO/CP | The identity service provided by the Cloud Provider, which is used to gain access and authenticate into the cloud and the cloud provider retains control over this identity service. The HO is responsible for use of this, through Account Identities and Access Controls above. |
| Network Controls | CP | HO/CP | HO | Network controls such as firewalls, load balancers, DMZ, segregation securing access, monitoring etc. are the responsibility of the Home Office when running IaaS (e.g. EC2) and are the responsibility of platforms, networks & infrastructure and portfolios to undertake (the split in responsibility depends on the model within the accounts). The PCT can assist by implementing technically enforced policies and guidelines that prevent the network controls being too open, these will be defined in conversation with portfolios, OCISO and CSOC. Within the SaaS model the cloud provider retains responsibility of these controls - however, from an assurance perspective the Home Office should be appraised of what these controls are. |
| Operating System | CP | HO/CP | HO | Within SaaS tools this remains the responsibility of the cloud provider, who will patch and keep these up to date. Within most PaaS this is also true, however, within IaaS it is the responsibility of the Home Office to manage the OS and keep these up-to-date. This is the responsibility of the portfolio/platform to undertake this. On AWS this can be done using AMIs and the public cloud team can support this with technically enforced policies, monitoring and guidelines that can alert or prevent deployment of vulnerable OS. |
| Logging Provision | CP | HO/CP | HO | Cloud providers have several tools in place to assist with logging and the provision of logs for SaaS and PaaS is primarily the responsibility of the cloud provider, with the Home Office taking responsibility to ensure that these have been turned on and configured. The PCT may provide guidance and technical enforcement of logging across the estate through policies, but these will be agreed between portfolios, platforms, OCISO and CSOC. Note even in IaaS the Home Office can hook AWS logs generated on the infrastructure, i.e. VPC flow logs, API calls into CloudTrail, but other logs remain the responsibility of the portfolio or platform running the IaaS to provision and ensure these are protected. |
| Storage & Encryption | CP | CP | HO | The physical data storage always remains the responsibility of the cloud provider. The encryption and configuration of databases on top is the responsibility of the Home Office portfolios and platforms that are using the cloud services. They can specify what encryption is in place and policies around data storage. There is an exception when using a SaaS service where the cloud provider manages the encryption and configuration of database also. |
| Networking | CP | CP | CP | The physical networking within and out of a data centre is the responsibility of the cloud provider. |
| Kernel Hardening | CP | CP | HO | Kernel hardening is a kernel configuration that mitigates any vulnerabilities or bugs within the kernel to prevent cyber security attacks. Where the Home Office deploys its own OS and devices it is the responsibility of HO to manage this and this would set with Portfolios and Platforms to do. Otherwise, this remains the responsibility of the cloud provider. |
| Boot | CP | CP | CP | This is part of the physical infrastructure of the data centre and is always the responsibility of the cloud provider. |
| Hardware | CP | CP | CP | The physical infrastructure within the data centre is always the responsibility of the cloud provider. The Home Office must ensure in line with the SPF that they are content with the physical security of any supplier they use, which can be demonstrated through physical security reviews/audits often conducted by third party consultancies under the SOC 2 reports. The provider is also responsible for the virtualisation. |
Cloud Providers and Home Office Responsibility Model
The responsibility model split between the Cloud Provider and the Home Office is shown in the diagram below. This has been genericised across the IaaS/PaaS/SaaS type services, where the more purple equals more responsibility that the Home Office takes over the service (i.e. for a Operations HO would have responsibilities for IaaS and PaaS components but the Cloud Provider would have the same for SaaS).
What does this mean in practice to the Home Office, and where do the responsibilities sit within the Home Office organisation structure?
The answer depends on where in Digital, Data and Technology the AWS account sits. Under the model, the Home Office has adopted this aligns to the division of the Home Office AWS estate into three Organizations (BICS-EBSA, Policing and Central). Note that the Public Cloud Team will remain responsible for billing across all accounts, although we will not retain root account responsibilities for Policing. This has an impact on cyber security risk management and where controls are put in place across the organisation.
Home Office Responsibility Matrix
| Area of Responsibility | ACP | EBSA | Policing | HMPO | Wider HO |
|---|---|---|---|---|---|
| Customer Data | Portfolio | Portfolio | Policing | Portfolio | |
| Billing | PCT | PCT | Policing | PCT | |
| End-points & Devices | EUC&C + Suppliers | EUC&C + Suppliers | Policing | EUC&C + Suppliers | |
| Account Identities | PCT | EBSA + PCT | Policing | PCT | |
| Access Controls | ACP + PCT | EBSA | Policing | Portfolio + PCT | |
| Monitoring Usage and User Audit | ACP + Portfolio | EBSA | Policing | Portfolio + PCT | |
| Web Application Security | ACP + Portfolio | EBSA + Portfolio | Policing | Portfolio + Platform | |
| Deployment | ACP | EBSA | Policing | Portfolio + Platform | |
| Operations | ACP | EBSA | Policing | Portfolio + Platform | |
| Access and Authentication into the Cloud | PCT | EBSA | Policing | PCT | |
| Network Controls | ACP | EBSA | Policing | Platform | |
| Operating System | ACP | EBSA | Policing | Platform | |
| Logging Provision | ACP | EBSA | Policing | Platform | |
| Storage & Encryption | ACP | EBSA | Policing | Platform | |
| Kernel Hardening | ACP | EBSA | Policing | Variable |
The responsibility matrix can also be expanded to other areas of processes and standards across the HO organisation and diagram below shows a generic responsibility model across Central teams (i.e. Enterprise Services teams), Platforms (i.e. EBSA, ACP, LECP), Portfolios (i.e. BICS, PPPT) and HO capabilities such as CSOC/ITOC and OCISO. It is noted that individual areas will have a slightly different split of responsibilities and this should be outlined within security and service wrappers.
What does the above mean for my project?
That depends on what service type you are using and where in the Home Office your project is. If you are using IaaS, i.e. you are running and managing your own EC2 instances to do something on your application, you will be responsible for significantly more security controls than if you are using a HO Platform such as EBSA or ACP. The key thing to remember is that although your project may not be directly responsible for the configuration and provision of cloud services you use from a data protection and cyber security perspective your Senior Responsible Owner will be taking risks that are mitigated by actions of other teams.
The Public Cloud Team is available to help with any questions and queries email<EMAIL_ADDRESS>Further resources
Access Keys
This guidance has been designed to help development and operational teams using AWS to avoid using long-lived access keys and use temporary credentials instead (via the Secure Token Service).
Note: An alternative is to ensure the long-lived access keys are rotated regularly (i.e. within 90 days of creation).
What is an access key?
An AWS access key are long-term credentials for an IAM user. Access keys consist of an id and secret which is similar to usernames and passwords. Access keys can be used to sign programmatic requests to the AWS CLI or AWS API (directly or using the AWS SDK).
Access keys in the Home Office
The Home Office as of May 2020 has over 1400 active AWS access keys which had not been rotated within 90 days, of which over 350 (25%) have not been rotated in over two years. Static credentials pose a security and compliance risk as it means they can be used on an ongoing basis if they have been lost, stolen, cracked or published to a public repository. At present access keys are used by both users and applications / services.
Why is rotating access keys important?
The importance of AWS access keys and rotation of them can be seen through their inclusion in the AWS top 10 security items to improve in your AWS account and CIS AWS Foundation Benchmark.
The Public Cloud Team encourage the use of more secure and robust access key policy for the Home Office to educate users, application and platform teams of best practice and to encourage good behaviours. In the future the PCT may if authorised by Home Office technical, data, governance and security fora enforce the use of best practice, however, the current model is educate, detect, guide.
Policy
The PCT are looking at implementing the following policy for access keys, to reduce the risks to the Home Office. We will not force business areas to comply with the policy. The policy will allow us to highlight where there are potential risks in the organisation.
- AWS access keys should not be used where there is a valid alternative available using temporary access keys
- AWS access keys must only be created where there is a clear requirement for programmatic access
- AWS access keys must be rotated at least every 90 days, if not more often, either through the AWS Console, Command Line Interface (CLI), or Application Programming Interface (API). Instructions for rotating access keys
- Individual AWS access keys must not be shared internally or externally with any other user or organisation, that is not the intended recipient of the access key
- AWS access keys must be securely stored and approved as part of a service's security assurance
- AWS access keys must not be embedded directly into code or repositories, tools provided by the AWS SDK and command line tools (e.g. AWS credentials file) should be used instead. Further documentation for using temporary
- In the event an AWS access key is published to the internet (e.g. GitHub), shared or lost you should follow the relevant incident management process and notify<EMAIL_ADDRESS>immediately. The access key should also be made inactive and deleted.
- Permissions for individual users, services or applications using AWS access keys should be limited, based on least privilege and regularly reviewed (administrative permissions should be given as a last resort)
- Multi Factor Authentication (MFA) must be enabled for any individual IAM user that has programmatic access and AWS access keys provided to them
Rotating your Access Keys
Access keys have a high level of permission, do not require re-authentication or use of MFA and can be easily committed as code. Therefore, it is much better practice to rotate any access keys that you use on a regular basis (AWS recommend a maximum of 90 days). It is noted that AWS recommend using temporary security credentials through the STS service over using access keys at all.
In order to rotate your access keys, you need to have permission. All Home Office users with HOFullAdmin role should have the correct permissions. If you do not, you can raise a request with the Public Cloud Team to update your permissions. AWS have produced step by step guidance for rotate access keys using the Console, the CLI and the API to rotate any user access keys.
Amazon blog post for rotating access keys
Temporary Access Keys
At present the use of AWS access keys provide high levels of access with long lived credentials. However, in most cases long lived credentials are not required, and the access requirements can be fulfilled using short-lived temporary security credentials.
Temporary security credentials are generated using the Security Token Service through the assumption of IAM roles. Along with an access key ID and secret access key, a security token is also created that indicates when the credentials expire. An example of the flow is provided below.
The primary benefit of temporary access keys provided by STS is that it limits the potential blast radius of any security incident, as the credentials provided are short lived. This means if they are accidently shared, published or stolen they will soon time out without user intervention. Where it is required though temporary security credentials can be revoked as detailed. How to revoke IAM role temporary security credentials
Amazon EC2
Where an application or AWS CLI script is running on an EC2 instance do not use access keys directly in the application. Instead define an IAM role that has the appropriate permissions for your application and attach it to the EC2 instance to be used. For applications using the AWS SDKs and CLI temporary credentials are retrieved from the role automatically. IAM roles for EC2.
AWS Lambda
Each Lambda function has an execution role created in IAM that provides the function with the necessary permissions to run. When using the AWS SDKs, the temporary credentials are automatically retrieved from the execution role. Long lived AWS access keys should not be used at all when using Lambda including providing them via the environmental variables. AWS Lambda execution role.
IAM USERS
The majority of IAM users do not require access keys that provide them with high levels of permissions, or multiple access keys to access multiple AWS accounts. Instead following best practice IAM users should be provided with a single AWS access key that provides a minimal level of access, this reduces the blast radius of long-lived access keys being published to the internet, shared or stolen as they will have restricted access. When users require privileged access, they should assume a role which will grant them temporary credentials as per figure 1. This can be used both within the same account that the IAM user exists in and to provide cross account access.
Future
The PCT are currently under educate, detect, guide model, where we are aiming to improve cloud practices across the Home Office by improving understanding of the cloud, being able to highlight when best practices are not being followed, and guiding our users.


{% extends '_layouts/layout.html' %} {% block page_title %}{% endblock %} {% block body_css_classes %}nhs-redesign{% endblock %} {% block content %}
Get help as soon as you can.
The emergency department is also known as accident and emergency or casualty.
The emergency department is also known as accident and emergency or casualty.
If your symptoms get worse, call 111


Musings on making a personal website
Monday, June 9, 2014
It's been a long struggle. I've owned this domain for over 3 years now, but it's only today that I actually have put anything of meaning on it.
Today, that all changes. This is the start of a new era in the life of Omar Diab! One where he is a prudent citizen of the web!
OK, let's be real here. In all likelihood, that won't be the case. But I can try, and so, here goes! A short chronicle of how I ended up coding this thing on a Sunday night before my last final of my undergraduate career.
Attempt #1: The PHP Mega-Platform™
During my first attempt to make a personal website, I had grand ambitions but little experience. I wanted to make the be-all-end-all platform for making personal websites.
In an attempt to overcome thinking about making a personal website, I decided I wanted everyone else to stop thinking about it, too.
So I tried to make a general platform in the one language I knew, PHP. It was disastrous and I spent so much time architecting bad abstractions that reflected my inexperience that I never finished it.
Attempts #2 and #3: Descent into framework-mania
At that point, fresh out of the Stanford web development course, I decided that the web development community had something going for it, and that I need not reinvent the wheel. So I tried my best to make an over-engineered Rails app that would handle anything I could possibly want from a personal website.
Needless to say, I never finished that one either, and out of desperation I wrote a Sinatra application that lay dormant and contained nothing until this very day.
I realized that I never really thought about why I even wanted a webpage, and I was designing software for no particular reason.
There's nothing wrong with coding for the fun of it, and I chose the approaches and frameworks I did because I wanted to have practical experience in those things. But never did I question the purpose of my work, as being an amateur in academia, I saw few opportunities and little time to spend on practical applications.
A beautiful, lovely rebirth
It's 4AM. The Target-brand oscillating table fan has been running all day. A balloon, anchored to the ground by a plastic weight, violently jerks back and forth with the turning of the fan, slowly but surely inching around the room. The two objects oscillate back and forth chaotically, yet the balloon remains directly in the path of the fan. It never wanders away from the fan's buffets and streams.
Inspired by the simplicity of that ridiculous, mind-numbing sight, I decided to scrap it all, write a simple, static application and throw it on Github Pages in the span of a few hours that will be cheaper to run and more likely to stay up than any of my previous attempts at expressing myself on the web. This page is the product of that work.
No databases. No templating. Just HTML, CSS, and some JS to soften the edges. Nothing more, nothing less.
So, why? I've decided I want a personal website for these reasons:
- To encourage myself to communicate more on the web. I've never been one to blog; I don't follow Twitter and my Facebook page is home to contextless non sequiturs to my friends. I want to write more in general, but I lack the impetus to do so; I want to understand trends on the web, but I feel paralyzed with most that exists today. This is a step for me to establish my presence online.
- To express myself uniquely. I search for visual, textual, and auditory ways to represent myself all the time. I cannot say for certain why; Perhaps it's mere egotism, but more likely people just search for the validation that comes from social interaction and this is merely a manifestation of that. Regardless, I value the feeling of putting myself out there, and this is one form of that goal.
- To solidify my understanding of the underpinnings of frontend web development. This is not a very interesting point, as it's purely vocational.
- To say I've done it, to put this long, drawn-out project behind me. To. Move. On.
None of these require fancy extensibility or solid engineering. A site like this is so simple it requires none of the bells and whistles the modern web has brought us.
Hence, I am here today, writing this text directly into an HTML file. And I intend to keep it this way (and maybe make it look nicer on mobile ;)).


Reflecting on Reflections
“Since everything is a reflection of our minds, everything can be changed by our minds.” - Buddha
11 December 2020
Core Reflections
What are three new things you have learned about yourself and your ego as a result of the core learning?
- When I come up against a challenge, an initial response is often to find the easiest solution. Once realised, this can be harnessed for good. Someone once said laziness is the father of innovation. So yes, look for an easy out, a quick solution, something innovative, but most importantly, understand it, and make sure it bloody well works.
- It can be easy to beat yourself up when you can’t solve a problem.  This happens, and it happens to everyone. But by believing in Neuroplasticity and Growth Mindset, you can attack problems with the belief that if you keep pushing and keep trying, you will keep learning and developing, until soon enough, that problem seems like the simplest of issues.
- Listening is hard. This was quite surprising. My girlfriend likes to tell me that I have selective listening. I never believed her until I tried to listen to everything someone had to say in two minutes. Having realised this after my first round of listening and looping, I was far more attentive in my second round. I look forward to doing more in bootcamp!
What are the roles of values, empathy and self awareness in learning and programming?
With these attributes in mind, we can develop a holistic-of-sorts approach to learning and programming. By understanding that we are all different, we all learn at different rates, and we all have different perspectives, we can harness the knowledge and help of those around us, and work as a team to aid in our own development. Taking in to account our own personal values, and a self awareness of our strengths and limitations, we can identify where and how we need to focus our time and energy, to help us learn and become better programmers/
What has surprised you the most about the core learning?
Its relevance. It is very easy to pooh-pooh this kind of learning. “I already know how to deal with people”,”I’ve worked in a professional capacity before”,”I know how to interview for a job and not look like a complete recloose”. These things are easy to say, but it’s harder to understand that we can always learn more about ourselves and those around us. Our development as humans is never ending, we are not computers built to do exactly as a function requires, but much more complex creatures, and it's worth spending time exploring that.
What were the most challenging aspects of the core learning?
Reflection. It’s always an easy one to skip. You finish a task and you’re eager to move on to the next one. I am still very much guilty of this. But It takes reflection, such as typing that last sentence out, to really understand. So have a break, have a kit-kat, and reflect on what you’ve just done.
Why do you think we, a programming school, are spending so much time focusing on core learning in a web development bootcamp course?
The cliche programmer sits in a dark room, ideally a windowless basement, of an office building and has no social skills whatsoever. In 2020, this is most certainly not the case. There is nothing wrong with being introverted and working autonomously, in many cases, that works very well. But in order to work as part of a team, we need to be sociable and understanding. This avoids conflict, and aids in effective communication, which of course leads to great work.
Does the time you spent studying core learning here feel like a waste of time? Should you have just used that time to practicing programming instead? Justify your answer.
Absolutely not. As I have highlighted above, I have learnt a lot from the core side of this course. I look forward to more in bootcamp!
Learning Reflections
What is your long term goal and/or career pathway?
I would love to be able to leverage my skills learned at DevAcademy for social enterprise. I absolutely believe that coding can be used to positivly impact real-world problems. However to get to this point, I would love to have to opportunity to work at a company or agency for a few years in order to develop more as a coder and learn from senior devs, and new challenges.
What do you think your biggest strengths and limitations will be in Bootcamp?
I believe that once I get going, I can problem solve relatively well and write code, however, a weakness I face is breaking a large project in to smaller functions to work on. When looking at the bigger picture, I find it difficult to imagine how the code would be written to solve the problems. I think that a lot of help in this area will come from my peers and also from guidance from tech facilitators. In saying that, it will also be down to me to acknowledge this limitation and work to overcome it.
I will also need to make sure I take plenty of breaks away from the computer.
What do you think your biggest non-technical challenge at Bootcamp will be?
Nine weeks is a long time. Being away from my partner will be difficult. But I do not see that as becoming a major issue. Long days will be tough for me, but I understand Why they are needed, and that ultimately, nine weeks is not a long time at all, compared to a lifelong career. So its time to knuckle down, stop messing about, and crack on with it.
What non-technical skills - human skills - would you like to see developed in yourself while at EDA?
I would like to work on communication. I don't think im a difficult person to work with, but I do think my communication skills could be worked on. When communicating an issue to a colleague, I often think that my explanation is not clear enough for them to understand the problem. As such, I would like to work on clear communication. I tend to waffle, but waffles are delicious, so it's not all bad.
What are your expectations of yourself on Bootcamp
I will try my hardest to solve an issue myself, but it would be worthwhile having a self imposed timebox to work on issues, If I need help, I will ask my peers. Discussing issues together will my closely simulte a working environment, and it creates a learning opportunity for all. Following this, technical advisors will be the next resource. With more experience, they hold a wealth of knowledge that is there for the taking.
Write down a commitment to how you will manage your workload in this programme. This should include - an explanation of how you will manage yourself to work productively and safely with other learners, facilitators and industry/community representatives.
Focus on the task at hand. Having a set daily routine and being in a working environment will aid productivity, but it will also be important to recognise stress and feelings of being over worked. As such, it will be vital to take frequent small breaks. Full participation in core and extracurricular activites such as yoga (Shoulder dependant), and going for a beer with other students will be essential as well. Not only to ease stress, but also to create a bond with fellow students that will help in the working environment.
Most importantly - Go for a walk, get some fresh air, vitamin D, good healthy food, and plenty of sleep. It's a marathon, not a sprint!


Loss¶
-
class
package.loss.
LabelSmoothingLoss
(vocab_size, ignore_index, smoothing=0.1, dim=-1)[source]¶ Provides Label-Smoothing loss.
Parameters: - vocab_size (int) – the number of classfication
- ignore_index (int) – Indexes that are ignored when calculating loss
- smoothing (float) – ratio of smoothing (confidence = 1.0 - smoothing)
- dim (int) – dimention of calculation loss
- logit (torch.Tensor) – probability distribution value from model and it has a logarithm shape
- target (torch.Tensor) – ground-thruth encoded to integers which directly point a word in label
- Returns: label_smoothed
- label_smoothed (float): sum of loss
- Reference:
- https://github.com/pytorch/pytorch/issues/7455
-
forward
(logit, target)[source]¶ Defines the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Module
instance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.


Public Lab:
Grapherate
Enter a public key from
Sparkfun's Phant service
to generate a live graph of it. (
example here
)


peakTree extension¶
peakTree Setup¶
Optionally, for faster reading (building the trees from the netcdf file) a cython extension can be used. This extension has to be complied:
python3 setup.py build_ext --inplace
Load and plot¶
Loading the data works similar to the standard larda, only the third dimension of
the data_container is a dict
of nodes instead a further array dimension.
To plot these data into a time height crosssection, a parameter (reflectivity, velocity, width, …)
and a node index have to be choosen.
larda=pyLARDA.LARDA().connect('lacros_dacapo')
begin_dt = datetime.datetime(2019, 2, 19, 4, 0)
end_dt = datetime.datetime(2019, 2, 19, 5, 30)
trees=larda.read("peakTree", "tree", [begin_dt, end_dt], [0, 10000])
# the tree_to_timeheight selects a 2d array from the ['time', 'range', 'dict'] data container
# here just the total number of nodes is returned
no_nodes = pyLARDA.peakTree.tree_to_timeheight(trees, 'no_nodes')
no_nodes['name'] = 'no. nodes'
no_nodes['var_unit'] = ''
# plot_no_nodes provides a wrapper with special colormaps
fig, ax = pyLARDA.peakTree.plot_no_nodes(no_nodes, fig_size=[13, 5.7])
fig.savefig("{}_no_nodes.png".format(begin_dt.strftime("%Y%m%d-%H%M")), dpi=250)
# plot Reflectivity of node 0
z_node0 = pyLARDA.peakTree.tree_to_timeheight(trees, 'z', sel_node=0)
z_node0['name'] = 'Reflectivity'
z_node0['var_unit'] = 'dBZ'
fig, ax = Transf.plot_timeheight(z_node0, fig_size=[13, 5.7])
fig.savefig("{}_Z_node0.png".format(begin_dt.strftime("%Y%m%d-%H%M")), dpi=250)
select nodes based on rule¶
Special features can easily be detected by selection rules. An example is already provided with
pyLARDA.peakTree.select_liquid_node()
. The found index is returned as a 2d array inside a data container.
# select the indices by a rule
# here: node['z'] < -20 and abs(node['v']) < 0.3
selected_index = pyLARDA.peakTree.select_liquid_node(trees)
# plot the selected index
fig, ax = pyLARDA.peakTree.plot_sel_index(selected_index, fig_size=[13, 5.7])
fig.savefig("{}_ind_node_liq_wide.png".format(begin_dt.strftime("%Y%m%d-%H%M")), dpi=250)
# extract a 2d array of the parameters
liquid_z = pyLARDA.peakTree.tree_to_timeheight(trees, 'z', sel_node=selected_index['var'])
liquid_z['name'] = 'Reflectivity'
liquid_z['var_unit'] = 'dBZ'
# and plot
fig, ax = Transf.plot_timeheight(liquid_z, fig_size=[13, 5.7])
fig.savefig("{}_Z_liq_wide.png".format(begin_dt.strftime("%Y%m%d-%H%M")), dpi=250)
print single tree¶
single_tree = pyLARDA.Transformations.slice_container(
trees, value={'time': [h.dt_to_ts(datetime.datetime(2019,2,19,4,16,30))],
'range': [2100]})
pyLARDA.peakTree.print_tree(single_tree)
Standalone¶
The pyLARDA.peakTree
module can be used without the main part of pyLARDA, when loading the file manually.
For convenience one might add the pyLARDA.Transformations
.
import pyLARDA.peakTree
import pyLARDA.helpers as h
import pyLARDA.Transformations as Transf
# configuration which is normally provided by the
# connector/toml file
paraminfo = {'time_variable': "timestamp",
'range_variable': 'range',
'time_conversion': "unix",
'range_conversion': "none",
'var_conversion': 'none',
'system': "peaktree_peako",
'var_unit': "tree",
'rg_unit': "m",
'paramkey': "trees",
'colormap': "gist",
'var_lims': [-99, -99],
'altitude': 181,
'ncreader': 'peakTree'}
rdr = pyLARDA.peakTree.peakTree_reader(paraminfo)
filename = "../20140202_1600_kazrbaeccpeako_peakTree.nc4"
trees = rdr(filename, [begin_dt, end_dt], [200, 3000])
# trees is then the standard data_container of dim ['time', 'range', 'dict']
doc-strings¶
-
pyLARDA.peakTree.
build_tree_py
(data, ldr_avail)[source]¶ pure python/numpy version of the build tree function (slower than the compiled cython version)
Indices in the stacked data array:
0: 'parent', 1: 'Z', 2: 'v', 3: 'width', 4: 'skew', 5: 'threshold', 6: 'prominence', 7: 'bound_l', 8: 'bound_r', optional 9: 'LDR', 10: 'ldrmax'
-
pyLARDA.peakTree.
array_to_tree_py
(data, ldr_avail)[source]¶ convert the array from the netcdf to var of data container pure python/numpy version (slower than the compiled cython version)
-
pyLARDA.peakTree.
peakTree_reader
(paraminfo)[source]¶ build a function for reading the peakTree data (setup by connector)
-
pyLARDA.peakTree.
tree_to_timeheight
(data_cont, param, sel_node=0, **kwargs)[source]¶ convert the tree data container to a normal time-height data container by extracting a node and a parameter
Parameters: - data_cont (dict) – data container
- param (str) – parameter to select, eg z, v
- sel_node (np.array or int, optional) – integer or array of index to select
- **kwargs –
Returns: data container of dimension
['time', 'range']
-
pyLARDA.peakTree.
select_rimed_node
(data_cont)[source]¶ select the rimed nodes from a peaktree data container The nodes are filtered by the rule:
abs(n['v'][0]-n['v'][-1]) > 1.5
Parameters: data_cont – peakTree data container Returns: data_container with selected indices in var
of shape(time, range)
-
pyLARDA.peakTree.
select_liquid_node
(data_cont, **kwargs)[source]¶ select the liquid nodes from a peaktree data container
The nodes are filtered by the rule:
n['z'] < -20 and abs(n['v']) < 0.3
Parameters: data_cont – peakTree data container - Key word arguments:
- Z_thresh, maximum Z of liquid peak (default is -20) LDR_thresh, maximum LDR of liquid peaks (LDR ignored if not given)
Returns: data_container with selected indices in var
of shape(time, range)
-
pyLARDA.peakTree.
select_columnar_ice
(data_cont, **kwargs)[source]¶ select columnar ice nodes from a peaktree data container
The nodes are filtered by the rule:
n['z'] < -10 and n['ldr'] >= -20
Parameters: data_cont – peakTree data container - Key word arguments:
- Z_thresh, maximum Z of columnar ice peak (default is -10) LDR_thresh, minimum LDR of columnar ice peaks
Returns: data_container with selected indices in var
of shape(time, range)
-
pyLARDA.peakTree.
select_fastest_node
(data_cont)[source]¶ select the fastest-falling nodes from a peaktree data container
Parameters: data_cont – peakTree data container Returns: data_container with selected indices in var
of shape(time, range)
-
pyLARDA.peakTree.
select_large_ice
(data_cont, **kwargs)[source]¶ select the fastest-falling nodes from a peaktree data container if they have high reflectivity and low LDR
Parameters: data_cont – peakTree data container - Key word arguments:
- Z_thresh, minimum Z of large ice peak (default is -10) LDR_thresh, maximum LDR of large ice peaks
Returns: data_container with selected indices in var
of shape(time, range)
-
pyLARDA.peakTree.
plot_no_nodes
(data_cont, **kwargs)[source]¶ wrapper for
pyLARDA.Transformations.plot_timeheight2
to plot the no of nodesParameters: - data (dict) – data container
- **kwargs – piped to plot_timeheight2 function
Returns: fig, ax
-
pyLARDA.peakTree.
plot_sel_index
(data_cont, **kwargs)[source]¶ wrapper for
pyLARDA.Transformations.plot_timeheight2
to plot the index of selected nodeParameters: - data (dict) – data container
- **kwargs – piped to plot_timeheight2 function
Returns: fig, ax