Hi!
I want to help you build better software!
After a decade as a researcher in Computer Science at Aarhus University, I’m looking for new opportunities within software engineering and/or UX.
In the span of the last 10 years as an HCI researcher, I have built multiple applications, demos, distributed systems, data analysis, and more. I have supervised over 100 projects within product design, user experience, systems design, and development. I’ve lectured about UX research and design, agile methodologies, C4 models, UML, software patterns and WebSockets, data-driven projects, evaluation, project management, and much more. I’ve spent countless hours at the whiteboard grokking a particular problem or helping students identify the right architecture or why their current system breaks.
I love building software! I want to join a team where I can contribute and learn at the same time. I can step into a role as a senior UX or as a software developer or solution architect, or it could also be something entirely new!
Ping me for a chat over coffee!
Here is a link to my resume as a PDF, see full resume for details
Currently, I’m an Assistant Professor in Computer Science at Aarhus University, with human-data interaction as my research focus. I try to understand how to better integrate data into application design, interactive systems, analytics, visualization, and interaction design from an end-user perspective. I research how people use data and explore new tools to support analytics, visualization, and data-driven approaches. I teach experimental system development, design research, user-driven agile software development, co-design, and prototyping.
I have an MSc in Information Technology on Interaction Design, Open Data, and Smart City technologies. I hold a Ph.D. in Computer Science from Aarhus University in Human-Computer Interaction (Interaction Design, User Experience, User-centered design, and design research). My thesis focuses on the theoretical and empirical foundations for location-based services and community software.


More than just a Website A Standalone Worklist, Viewer and Reporting Software
Is to provide radiologists the tools they need to make the next leap in patient care. The demand for medical imaging services is continuously increasing, outpacing the supply of qualified radiologists and stretching them to produce more output, without compromising patient care.
Only by adopting new technology that significantly enhances the capabilities of radiologists, can this crisis be mitigated. We empowering radiologists with its revolutionary Web-based Reporting System which helps health providers manage the ever increasing workload without compromising quality.
If you are interested in our product, please contact us
Email Address: mrg.IT.company@gmail.com


Hi guys, I am writing this blog to help people starting with Django. This tutorial inclined on basic of Django so that any one cat start with. If anyone has some other doubt than free to ask me by making a comment or email me.
Django is python framework for web development, Before Jango I only know Flask(Other python Framework), it is very much similar to a simple python programming. For learning Flask, you only have to read very first page of there documentation And you ready to build. whereas Django is the vast and versatile framework. It is very nicely written so to make your code look cleaner.
Start with basic installation
Install using pip:
pip install django
confirm install by typing:
django-admin --version
1.9
No error uptill here, means you have succefully install django
Make directory django_project
by typing command:
mkdir django_project
Now let’s do some Django.
Creating a project:
From command line cd into directory and run following command:
django-admin startproject mysite
This will create Django project name “mysite”.
Let’s look at what startproject created:
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
- The outer mysite/ root directory is just a container for your project.
manage.py
is a command line utility that interacts with Django project in various ways.- The inner mysite/ directory is the actual Python package for your project.
- mysite/__init__.py: An empty file that tells Python that this directory should be considered a Python package.
- mysite/settings.py: Settings/configuration for this Django project. It contains configuration related to database setup, template static file location etc.
- mysite/urls.py: The URL declarations for this Django project;
Development server
python manage.py runserver
In your web browser type http://<IP_ADDRESS>:8000/
. You will probably be going to see the nice light blue window showing a success message.
Django comes with lightweight development server so that you can boost development of your application. But we suggest not to used for production.
Congratulate guys you have successfully installed Django
Now next part is adding application and basic functioning of files present.
Creating polls app:
For creating your first app type command:
python manage.py startapp polls
This command will generate polls directory with follwing file:
polls/
init.py
admin.py
apps.py
migrations/
init.py
models.py
tests.py
views.py
Writing views
“Views.py” as by name is responsible what user will view. Views are written in file views.py .
polls/views.py
This is simplest view in Django. Views are called when they map with URL - for this we need to URLconf.
To create a URLconf in the polls directory, create a file called urls.py. Your app directory will look like:
polls/
init.py
admin.py
apps.py
migrations/
init.py
models.py
tests.py
urls.py
views.py
In the polls/urls.py file include the following code:
polls/urls.py
The next step is to point the root URLconf at the polls.urls
module. In, mysite./urls.py
, add an import for django.conf.urls.include and insert an include() in the “urlpatterns” list, so you have:
mysite/urls.py
Now again runserver, And go to link http://localhost:8000/polls/ in your browser.
you are done with basic django installation now for more learning got Django Official tutorial part 2.
For any suggestion bugs and doubt feel free to comment or email.


Customizing Your Options for Composing Messages
From your preferences you can select to create simple plain text messages or create message with HTML styling, and you can set up signatures and personas that can be applied to messages you send.
In addition to the options for composing messages, other options you can set up include return receipt requests, whether to compose messages in a new window and to require that your message are spell checked before they are sent.
Go to the Preferences>Mail page, Composing Messages section.
Select how you want your messages to be sent, As HTML or As Text.
If you select As HTML, in the drop down menus, select the Font style, Size, and Color.
In Settings, select the options for how you want to manage composing messages.
|
Option |
Description |
|---|---|
|
Automatically save drafts of messages while you are composing |
While you compose your message, a copy is periodically saved in your Draft folder. |
|
Always request read receipt |
All messages you send request a return receipt message sent back to you when the recipient opens your message. When you set this as your default, you can change this for individual email messages from the Options drop-down menu on the compose toolbar. |
|
Reply/Forward using format of the original message |
Even if your default text editor is different from the message received, check this box to reply to the message in the same format as received. This is useful to make sure the recipient can get the message in the best format they can read. |
|
Always compose in new window |
A separate compose window opens. You can view and navigate within your mailbox while the compose window is open. |
|
Mandatory spellcheck before sending a message |
All messages are automatically spell checked before they are sent. |
|
Save a copy to Sent folder |
This is enabled by default. You can deselect this option. |
(Optional) Click Accounts Page to go to the Accounts preferences page and set up your personas.
(Optional) Click Manage your signatures.., to go to the Signatures Preferences page and add signatures that can be used when sending messages.
Click Save.


--- layout: bloglayout ---
Prevention is always better than cure. This is absolutely true with dental problems. Most of the frequent issues can be avoided with good care & a regular dental check up. This blog section will feature exclusive tips, suggestions about kids dental care. Hope this will of great help to the parents


Upload Date: 8th September 2020
With the world economy being precarious as it is, and the future being even more so unclear, I am not exactly sure what would be the best long term goal or career path that I should have.
For me, what is important to me is to be consistent and always be learning. So my mid to longer term plan will be to upload something on Git-hub, 5 times a week, every week for the next 3 years. My secondary goal is to learn Python and GoLang. Maybe after 3 years and building more knowledge, skills and ability to be consistent, I will have a clearer view of the path I should take.
I would like to continue to improve my communication and collaboration skills. With the whole course being online, it would be highly beneficial to learn more digital communication skills. This skill will be coming more in demand in the upcoming post-covid (or mid-covid) era.
My core competence is that I have an open mind, and the solid attitude to embrace learning. I have the patience to deal with complicated issues and collaborate in a team.
My limitation would be that there isn’t a time where I can look back where I have been doing something consistently, regularly, for more than a year (not counting education and work of course). This is the reason why I set my “long-term” goal as it is.
For the foundation, I will be working between 7 to 8 hours a day, and some odd extra study hours during the weekend. I will be utilising the Pomodoro technique to regulate my breaks.
During the boot-camp, I will be aiming to work 70hour a week or more. It will depend upon what the project is and what the time flexibility of my group will be like, but I will be aiming to work either 10 hours a day, everyday, or 12 hours for 5 days and 10 hours for one weekend.
I will be asking questions to the facilitators or the slack group whenever I have a question that I cannot solve after trying. I will use my own search ability first before seeking help. If there is not any need to ask for help, I can also ask for constructive feedback on my work.


VDrones
Sorry, you need Javascript in order to view this web app. Please enable it in your browser settings.
Welcome VDroner,
Forward
[up] [W]
Rotate Right
[right] [A]
Rotate Left
[left] [D]
Please wait, connecting to VSpace ...
Area 0 : Grab the cubes !
START


Developing Strategies for Mental Well-Being in the Tech Industry
Jaymie Rosen
@jaymierosen
jaymierosen.com
<EMAIL_ADDRESS>Disclaimers
- I am not a medical expert or professional
- This talk will include discussions on sensitive topics
- Only touching the tip of the iceberg; mental health is a complex issue
Outline
- Story that inspired this talk
- Lessons learned
- Stats && research about mental && physical health
- Unfortunate realities of working in tech
- Tips && advice for mental + physical well-being
1. Story Time
2. Lessons learned
Politely ask to take a tour of the office, towards the end of an interview
Don't feel pressured to take a job just because it's a job
Listen to your gut
Speak up early if a job is not working out for you
Keep track of warning signs
THERE ARE OTHER JOBS
Leave a job if you're truly unhappy
Mental and physical health > job
What is anxiety?
- Apprehension over what's about to happen and what could happen in the future
- Worried thoughts, or a belief that something could go wrong
- Feeling like you need to run away or avoid things that could cause further anxiety
What is depression?
- Feeling of sadness about the future, as though it's hopeless
- Lack of belief that positive things will occur
- Little worry, but instead a certainty of future negative emotions. Possible suicidal thoughts
What is social anxiety?
- The defining feature of social anxiety disorder, also called social phobia, is intense anxiety or fear of being judged, negatively evaluated, or rejected in a social or performance situation.
Bad news: anxiety and depression are not curable; they can be maintained and balanced with the right medication and treatment
Anxiety is totally natural and normal; it's what makes us human; the key is finding a balance of a normal amount of anxiety
- 1 in 5 Canadians experiences a mental illness or addiction problem
- By the time Canadians reach 40 years of age, 1 in 2 have—or have had—a mental illness
- Mental and physical health are linked. People with a long-term medical condition...are much more likely to also experience mood disorders...people with a mood disorder are at much higher risk of developing a long-term medical condition
- In 2005, just 50% of Canadians would tell friends or co-workers that they have a family member with a mental illness
- In 2015, 70% believe attitudes about mental health issues have changed for the better compared to five years ago
- 64% of Ontario workers would be concerned about how work would be affected if a colleague had a mental illness
- 39% of Ontario workers indicate that they would not tell their managers if they were experiencing a mental health problem
- 40% of respondents to a 2016 survey agreed they have experienced feelings of anxiety or depression but never sought medical help for it
- Organ damage to heart, pancreas, colon
- Digestion issues and brain damage
- Poor posture
- Pain in neck (heavy backpacks can cause this too!), upper back, lower back, hips, hamstrings, glutes, and thighs
- Strained, dry eyes, blurred vision, and headaches
- Blue light from digital devices suppresses the sleep-promoting hormone melatonin, keeping us from having restful sleep
- Shorter days and less sunlight lead to depression
- Lack of vitamin D can lead to depression
- Serotonin is also released in response to sunlight, which helps elevate your mood and energy
- Would you feel more comfortable talking to your coworkers about your physical health or your mental health? — 58% responded physical health
4. Unfortunate realities of working in tech
- IMPOSTER SYNDROME
- Keeping up motivation to work on side projects
- Always feeling like you're never experienced enough – scarcity
- Tech interview processes
- Feeling burnt out
- Feeling like you're competing against others all the time
- Feeling behind on the latest tech
- Feeling rushed to "catch up" to everyone else
- Because coding is my job, I don't want to do more of it!
- Your hobby was once for fun, but now it's work (working is not fun!*)
*just my opinion
Social anxiety can occur at...
- Work
- Attending meet-ups, conferences, social events, etc.
- Tech interviews/tech tests
Events, meet-ups, conferences, etc.
- Imposter syndrome kicks in
- Crowds can scare people
- Finding it uncomfortable to engage in coversation/meeting new people
Tech interviews/tech tests
- Live coding/unrealistic scenarios for tech testing
- Finding it hard to converse
- Feeling intimidated or overwhelmed by meeting new people
- Feeling judged by your skills
Work
- No one at work will like me
- Feeling left out
- I won't make any friends
- I will be judged negatively for my skills
- Getting along with your co-workers; they can have a large impact on your job experience and health
- If you work with toxic co-workers, you will likely find your social anxiety to increase and/or your mental health to suffer
5. Tips && advice for mental + physical well-being
- Try not to compare yourself to others
- Be patient with yourself: you're only human!
- Worrying is normal: try to dedicate a few moments during the day to worry
- Write worries down on a piece of paper
- There will always be jobs available! Be patient, and the right one will come along (I know, cliché, right?)
- If you feel overwhelmed by web development, find interests outside of coding
- Try to work on small tasks, leading up to a larger project in the end
- Code a little bit every day or a few days a week, outside of work
- Mentor and volunteer — teaching others helps you learn
- Find a mentor to help you!
- Go to an in-person workshop
- Make time to spend with family and friends
- ASK FOR HELP — coding problems, financial support, emotional support, etc.
- At work, take a small break every ~20mins; walk around and/or stretch
- If you're struggling with a problem, walk away from the computer
- Clean your space at home and at work
- Coming home to a messy and dirty home can increase mental unrest
- Go on vacations
- Take personal/sick days
Limit time spent on social media, news sites and TV, etc.
Offer your time donate or volunteer for a cause you care about
- Gut and digestive health is key
- Be "regular" 😉💩
- Get enough sleep (aim for 8 hours a night)
- Exercise and stretch
Fermented foods such as fermented vegetables are also important for optimal mental health, as they are key for optimizing your gut health. Many fail to realize that your gut is literally your second brain, and can significantly influence your mind, mood, and behavior.
- Supplements: vitamin C, vitamin D, probiotics, omega 3s, vitamin B, magnesium
- Drink a lot of water
- Eating a well-balanced diet: eating whole foods; avoid procesed foods
- Yoga, pilates, barre: low intensity/impact workouts
- Meditation, mindfulness (apps such as Headspace, Calm)
- Walking, swimming, biking
- Fitbit for tracking exercise
- Stretching
- Foam rolling: exercises here
- Exercise bands, yoga strap
TAKE ADVANTAGE OF YOUR MEDICAL BENEFITS AT WORK!!!
Summary
Looking out for your well-being both mentally and physically is more important than any job you will have. If your health suffers, your work suffers. If your workplace is toxic, it can have serious effects on your health. It's crucial to find a happy balance of a good workplace and good health. No job is perfect, but there is no point in suffering.
Thank you! 🤗💗
Questions?


Undergraduate
Undergraduate Research in CIS
Talented, motivated undergraduate majors in computer science and information systems are encouraged to get involved in research with a faculty mentor. Research opportunities are offered through the Science and Engineering Scholars program, faculty grants with research for undergraduates (REU) supplements, senior theses, independent studies with credit, and other arrangements with individual faculty leading research programs. Considerable information about undergraduate research at University of Delaware is found at urp.udel.edu.
Besides learning about the research process, undergraduate researchers work side-by-side with graduate students and learn about the graduate school environment, gaining valuable advice and guidance through the graduate school application process. In addition, undergraduate researchers often participate in writing papers and preparing posters or talks on their research. Sometimes, the work is published at a regional, national or international conference or workshop, and the student researcher is supported to travel to the venue to present their work with the global research community.
Students completing undergraduate research have been admitted to graduate school in computer science at some of the most well respected departments, including: Cornell, Princeton, University of Washington, University of Massachusetts, University of Virginia, University of California Berkeley, University of Maryland, and University of Texas. A good source of information about research, graduate school, and careers in computer science research is to be found at conquer.cra.org.
If you are interested in exploring undergraduate research in CIS, we encourage you to explore the faculty web pages and set up an appointment with individual faculty to discuss the opportunities in their research lab.


{{ partial "default/header" . }}
'It is like working with Excel with better and more advanced functionalities'


|
Cosan
1.0
Data Analytics Library
|
#include <customtransform.h>
Public Member Functions | |
| CustomTransform ()=delete | |
| CustomTransform (CosanRawData< NumericType > &RD, std::vector< NumericType > newInput) | |
| decltype(auto) | GetCustomFeatures () |
| Public Member Functions inherited from Cosan::Preprocessor< NumericType > | |
| Preprocessor () | |
| virtual | ~Preprocessor ()=default |
| virtual void | fit (const CosanMatrix< NumericType > &X) |
| virtual CosanMatrix< NumericType > | transform (const CosanMatrix< NumericType > &X) |
| Public Member Functions inherited from Cosan::CosanBO | |
| CosanBO () | |
| Default constructor. More... | |
| virtual const std::string | GetName () const |
| Get the name of the objects. More... | |
Private Attributes | |
| CosanMatrix< NumericType > | __customFeatures |
Definition at line 11 of file customtransform.h.
|
delete |
|
inline |
Definition at line 14 of file customtransform.h.
|
inline |
Definition at line 30 of file customtransform.h.
|
private |
Definition at line 32 of file customtransform.h.


Information about map and place
Eagle Falls
Cumberland Falls bird's-eye view from New Maps Plus on Vimeo.


| Menu ID | Name | Description | Prices | Stall Name | Image | Category ID | |
|---|---|---|---|---|---|---|---|
| Dear students, Last order will be at 9:30 p.m. | |||||||
| 1 | fried chicken | spicy and crispy chicken | $24.00 | Western Stall | 1 | ||
| 1 | fried chicken | spicy and crispy chicken | $24.00 | Western Stall | 1 | ||
| 1 | fried chicken | spicy and crispy chicken | $24.00 | Western Stall | 1 | ||
| 1 | fried chicken | spicy and crispy chicken | $24.00 | Western Stall | 1 |


Drive-In Movie Concessions Menu
Food
- Popcorn ... $2.50
- Hotdog ... $3.50
- Cheeseburger ... $4.00
- Soft Pretzel ... $1.75
- French Fries ... $2.00
Beverage
- Fountain Drinks ... $1.00
- Bottled Water ... $2.75
- Hot Chocolate ... $2.50
- Coke Icee ... $3.00
Sweet Treats
- Rootbeer and Coke Floats ... $3.50
- Ice Cream Bar ... $1.75
- Vanilla, Chocolate, and Strawberry Malts ... $3.50
- Cotton Candy ... $2.00


Discovered a new shortcut key. Hard to explain the deep satisfaction I get from such small things.
7/15/2010, 12:42:42 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
Discovered a new shortcut key. Hard to explain the deep satisfaction I get from such small things.
7/15/2010, 12:42:42 PM
Favs: 0
Retweets: 0
link


Suppose I want to write a quick and dirty program that prints out all the players and scores in that file, sorted by first name. I can do it very easily using a map as an associative array. The program is in simpgolf.cpp:
#include <iostream> #include <map> using namespace std; main() { map <string, int> golfer; map <string, int>::iterator git; int score; string name, s; while (cin >> score >> name) { getline(cin, s); golfer[name+s] = score; // Here's the associative array line. } for (git = golfer.begin(); git != golfer.end(); git++) { printf("%-30s %5d\n", git->first.c_str(), git->second); } } |
The commented line treats the map as an associative array -- indexed by a string. (You'll note, I construct the golfers' names by reading the first name, and then using getline() to read in the rest of the name). When I insert an element into the array, it inserts it into the map. At the end of the program, I traverse the map using an iterator and print out the names and scores:
UNIX> head 2009-Masters.txt 276 Angel Cabrera 276 Chad Campbell 276 Kenny Perry 278 Shingo Katayama 279 Phil Mickelson 280 John Merrick 280 Steve Flesch 280 Tiger Woods 280 Steve Stricker 281 Hunter Mahan UNIX> sed 's/\(...\)\(.*\)/\2 \1/' 2009-Masters.txt | sort | head -n 10 Aaron Baddeley 284 Adam Scott 299 Alvaro Quiros 306 Andres Romero 297 Angel Cabrera 276 Anthony Kim 286 Ben Crenshaw 309 Ben Curtis 288 Bernhard Langer 303 Billy Mayfair 305 UNIX> simpgolf < 2009-Masters.txt | head -n 10 Aaron Baddeley 284 Adam Scott 299 Alvaro Quiros 306 Andres Romero 297 Angel Cabrera 276 Anthony Kim 286 Ben Crenshaw 309 Ben Curtis 288 Bernhard Langer 303 Billy Mayfair 305 UNIX>That seems quite convenient, but you should ask yourself what happens if you try to access a map in this way, and the key isn't there? The answer is that it inserts the key into the map with a blank value. To illustrate, take a look at tiger_and_jack.cpp:
#include <iostream> #include <map> using namespace std; main() { map <string, int> golfer; map <string, int>::iterator git; int score; string name, s; while (cin >> score >> name) { getline(cin, s); golfer[name+s] = score; } cout << "Number of golfers: " << golfer.size() << endl; cout << "Tiger Woods' Score: " << golfer["Tiger Woods"] << endl; cout << "Jack Nicklaus' Score: " << golfer["Jack Nicklaus"] << endl; cout << "Number of golfers: " << golfer.size() << endl; } |
This program reads in the golfers just like simpgolf.cpp. After reading in the golfers, it prints the size of the map, then it prints Tiger Woods' score and Jack Nicklaus' score. Finally it prints the size of the map again. Below we run it on 2009-Masters.txt:
UNIX> tiger_and_jack < 2009-Masters.txt Number of golfers: 96 Tiger Woods' Score: 280 Jack Nicklaus' Score: 0 Number of golfers: 97 UNIX>Since Jack Nicklaus didn't play in the 2009 Masters, he has no score. When we try to look him up in the map, it creates a new entry for him with a default score of zero. For this reason, looking him up in the map has increased the size of the map by one.
Is that what you want? It doesn't really matter -- that's what happens, and you should be aware of it.
In allmajors1.cpp, I modified simpgolf.cpp so that the val field of the map is a vector of scores. Then when I traverse the map, I print out the average scores of the golfers who played in all four tournaments:
#include <iostream> #include <map> #include <vector> using namespace std; typedef vector <int> ivector; main() { map <string, ivector> golfer; map <string, ivector>::iterator git; int score, i; string name, s; double total; while (cin >> score >> name) { getline(cin, s); golfer[name+s].push_back(score); } for (git = golfer.begin(); git != golfer.end(); git++) { if (git->second.size() == 4) { total = 0; for (i = 0; i < git->second.size(); i++) total += git->second[i]; printf("%-30s %10.2lf\n", git->first.c_str(), total/4.0); } } } |
When I run it, all looks good:
UNIX> cat 2009* | allmajors1 | head Adam Scott 302.50 Alvaro Quiros 302.00 Andres Romero 294.50 Angel Cabrera 287.75 Anthony Kim 292.50 Ben Curtis 295.00 Boo Weekley 296.25 Brandt Snedeker 305.25 Briny Baird 304.75 Bubba Watson 297.00 UNIX> cat 2009* | grep Snedeker | awk '{ l++; n += $1; print n/l }' 309 306 306 305.25 UNIX> cat 2009* | grep Weekly | awk '{ l++; n += $1; print n/l }' 282 292 292.333 296.25 UNIX>However, I really want to sort by the best (lowest) scores. To do that, I can use a second map keyed on doubles. This is in: allmajors2.cpp. I add the second map and iterator in the variable declarations:
map <double, string> averages; map <double, string>::iterator ait; |
And insert by treating the map as an associative array, before printing it out:
for (git = golfer.begin(); git != golfer.end(); git++) { if (git->second.size() == 4) { total = 0; for (i = 0; i < git->second.size(); i++) total += git->second[i]; averages[total/4.0] = git->first; } } for (ait = averages.begin(); ait != averages.end(); ait++) { printf("%8.2lf %s\n", ait->first, ait->second.c_str()); } } |
When I run it, all appears well:
UNIX> cat 2009*.txt | allmajors2 | head 284.50 Ross Fisher 284.75 Henrik Stenson 285.00 Lee Westwood 285.25 Rory McIlroy 286.50 Camilo Villegas 287.00 Vijay Singh 287.25 Kenny Perry 287.75 Jim Furyk 288.75 Soren Hansen 289.25 Retief Goosen UNIX>But where is Tiger Woods? Certainly he would be in the top ten (at least in 2009, before his sex scandals and subsequent tanking of his golf game...):
UNIX> cat 2009*.txt | allmajors1 | grep Tiger Tiger Woods 287.00 UNIX> cat 2009*.txt | allmajors1 | wc 50 150 2100 UNIX> cat 2009*.txt | allmajors2 | wc 41 123 909 UNIX>I hope you see what has happened. We used a map, which means that when we inserted Vijay Singh's score of 287, it replaced Tiger's score. We need to instead use a multimap, and if we try to do so as in allmajors3.cpp, which simply replaces the map with a multimap, it will not compile, since you cannot use a multimap as an associative array:
UNIX> g++ -o allmajors3 allmajors3.cpp allmajors3.cpp: In function 'int main()': allmajors3.cpp:28: error: no match for operator[] in averages[(total / 4.0e+0)] UNIX>Instead, you have to go back to using the insert() method explicitly. This is done in allmajors4.cpp:
for (git = golfer.begin(); git != golfer.end(); git++) { if (git->second.size() == 4) { total = 0; for (i = 0; i < git->second.size(); i++) total += git->second[i]; averages.insert(make_pair(total/4.0, git->first)); } } for (ait = averages.begin(); ait != averages.end(); ait++) { printf("%8.2lf %s\n", ait->first, ait->second.c_str()); } } |
Now when we run it, we not only see Tiger Woods, we don't lose any golfers.
UNIX> cat 2009*.txt | allmajors4 | head 284.50 Ross Fisher 284.75 Henrik Stenson 285.00 Lee Westwood 285.25 Graeme McDowell 285.25 Rory McIlroy 286.50 Camilo Villegas 287.00 Tiger Woods 287.00 Vijay Singh 287.25 Kenny Perry 287.75 Angel Cabrera UNIX> cat 2009*.txt | allmajors4 | wc 50 150 1111 UNIX>
Our program will organize these as two data points that round to 6 and three that round to 2.
I'm going to write four versions of this program. They will all assume that our data points are nonnegative. The first uses a map, which it traverses like an array. It is in histomap1.cpp:
#include <iostream> #include <map> #include <cmath> using namespace std; main() { map <double, int> histo; double i; double d; while (cin >> d) histo[rint(d)]++; for (i = 0; i <= histo.rbegin()->first; i++) { if (histo[i] > 0) cout << i << " " << histo[i] << endl; } } |
It runs fine on our example above:
UNIX> echo 6.2 5.8 2.3 1.7 2.0 | histomap1 2 3 6 2 UNIX>The second implementation (histomap2.cpp) is identical to the first, except we use an iterator to iterate through the map rather than an integer.
#include <iostream> #include <map> #include <cmath> using namespace std; main() { map <double, int> histo; map <double, int>::iterator hit; double d; while (cin >> d) histo[rint(d)]++; for (hit = histo.begin(); hit != histo.end(); hit++) { cout << hit->first << " " << hit->second << endl; } } |
And a third implementation (histomap3.cpp) also traverses the map, but uses the map as an array to print out the values. I'm only including the for loop here:
for (hit = histo.begin(); hit != histo.end(); hit++) { d = hit->first; cout << d << " " << histo[d] << endl; } |
Finally, a fourth implementation uses a vector instead of a map. The implementation is in histovector.cpp
#include <iostream> #include <vector> #include <cmath> using namespace std; main() { vector <int> histo; double i; double d; while (cin >> d) { i = rint(d); if (histo.size() <= i) histo.resize(i+1, 0); histo[i]++; } for (i = 0; i <= histo.size(); i++) { if (histo[i] > 0) cout << i << " " << histo[i] << endl; } } |
All the implementations produce the same output on the same input, so they are all correct. However, let's think about how they are each going to fare on different input files. For tiny input files, they should all work equivalently. For example, tinyinput has the five example numbers above, and all four programs perform equivalently:
UNIX> time histomap1 < tinyinput > /dev/null 0.001u 0.002s 0:00.00 0.0% 0+0k 0+0io 0pf+0w UNIX> time histomap2 < tinyinput > /dev/null 0.001u 0.002s 0:00.00 0.0% 0+0k 0+1io 0pf+0w UNIX> time histomap3 < tinyinput > /dev/null 0.001u 0.001s 0:00.00 0.0% 0+0k 0+0io 0pf+0w UNIX> time histovector < tinyinput > /dev/null 0.001u 0.001s 0:00.00 0.0% 0+0k 0+0io 0pf+0w UNIX>The inputfile sparseinput has four values, two of which round to two and two of which round to 1,000,000:
4.2 1000000.1 1000000.2 3.8 |
When we run our four implementations, we see that histomap1 performs the worst. Why? Because when we traverse the map, we look at histo[i] for each value of i from 4 to 1,000,000. Doing so inserts each value into the map, meaning our map has roughly 1,000,000 elements instead of two.
Histomap2 and histomap3 are much faster, because they only look at two values in the map. Histovector is slower because it creates a vector of 1,000,000 elements. It is faster than histomap1, because the underlying implementation of the vector is an array, and the underlying implementation of the map is a tree. Thus, the creation of the map is O(n log(n))), where n=1,000,000, whereas the creation of the vector is O(n).
UNIX> time histomap1 < sparseinput > /dev/null 1.081u 0.049s 0:01.13 99.1% 0+0k 0+0io 0pf+0w UNIX> time histomap2 < sparseinput > /dev/null 0.001u 0.001s 0:00.00 0.0% 0+0k 0+0io 0pf+0w UNIX> time histomap3 < sparseinput > /dev/null 0.001u 0.001s 0:00.00 0.0% 0+0k 0+0io 0pf+0w UNIX> time histovector < sparseinput > /dev/null 0.023u 0.008s 0:00.03 66.6% 0+0k 0+0io 0pf+0w UNIX>Finally, the program biggen.cpp generates 10,000,000 numbers uniformly distributed between 0 and 1,000,000.
#include <cstdlib> #include <iostream> using namespace std; main() { int i; for (i = 0; i < 10000000; i++) printf("%.2lf\n", drand48()*1000000); } |
When we use it as input, the vector version of the program outperforms the others, because its insert operations take less time (and memory):
UNIX> time sh -c "biggen | histomap1 > /dev/null" 44.328u 0.839s 0:41.09 109.8% 0+0k 0+0io 0pf+0w UNIX> time sh -c "biggen | histomap2 > /dev/null" 42.677u 0.824s 0:39.44 110.2% 0+0k 0+0io 0pf+0w UNIX> time sh -c "biggen | histomap3 > /dev/null" 43.462u 0.850s 0:40.24 110.1% 0+0k 0+3io 0pf+0w UNIX> time sh -c "biggen | histovector > /dev/null" 26.350u 0.722s 0:22.99 117.7% 0+0k 0+0io 0pf+0w UNIX>What's the lesson? Use the proper data structure for the job. Sometimes the characteristics of the input dictate what data structure you should use.


 You could edit fragments of SQL by hand but you would then be responsible for telling other developers that they need to go and run them. You’d also have to keep track of which changes need to be run against the production machines next time you deploy.
The database table `migration` tracks which migrations have already been run so all you have to do is update your application files and call Migrate::current() to work out which migrations should be run. The current version is found in core/config/migration.php so like any other config file you should copy this to app/config to make changes.
Creating a Migration
Create a file in the app/migrations folder. The prefix should be an incremental count starting at 001, do not skip numbers and do not have two numbers that match. The first would be something like app/migrations/001_example.php.
namespace Fuel\Migrations;
class Example {
function up()
{
\DBUtil::create_table('posts', array(
'id' => array('type' => 'int', 'constraint' => 5),
'title' => array('type' => 'varchar', 'constraint' => 100),
'body' => array('type' => 'text'),
), array('id'));
}
function down()
{
\DBUtil::drop_table('posts');
}
}
Run a Migration
A migration can be run in two ways:
The oil command there uses the Refine command to call the migrate task.
$ php oil refine migrate $ php oil refine migrate:current $ php oil refine migrate:up $ php oil refine migrate:down $ php oil refine migrate --version=10
Note: The migrate:current task is to match your schema to the version listed in fuel/[app|core]/config/migrate.php as if you have just got a copy of the application, the very latest migration not be the one considered stable. Using oil for migrations will modify this migration config number so the current command will not be relevant in many situations.


Just looked at Python Templating Languages. I'm familiar with the main three (DTML, ZPT, and Cheetah). I assume the fourth (STL) is written by the author. I don't really agree with the way the paper lays out the issues, though it appears to be a draft. Here's how I'd score it (leaving out STL, which I don't know about): table.comparison td { border: 1px #666666 solid; }
| Cheetah | DTML | ZPT | |
|---|---|---|---|
| Documentation | 3 | 2 | 2 |
| How can the Cheetah docs not get a 3? ZPT is generally better documented than DTML, as it has a more easily documented scope, but it's a close call. They both have a considerable quantity of documentation, but both suffer from a lack of well-structured documentation, and have poorly documented corners. The internals (analogous to what Cheetah's Developers' Guide covers) are not documented much at all -- probably because they are meant only for a single environment (Zope). ZPT and DTML are documented in many books, but the books tend to be spotty. | |||
| Community | 2 | 2 | 3 |
| Easiness to fix errors | 1 | 0 | 3 |
| Debugging Cheetah means reading through the generated Python source, which isn't so good. There are also some misleading error messages that can occur. So that's not so hot. Still better than the travesty that is DTML. ZPT does really well, though -- excellent tracebacks, helpful parse errors. | |||
| Easiness to update | I don't really get this one | ||
| Easiness to refactor | This one is subtle, and depends on a lot more than just the templating mechanism. It's too hard to judge for me. | ||
| Learning curve | 2 | 2 | 1 |
| I think the imperative style of Cheetah and DTML is easier to understand, at least for someone that works with HTML textually (i.e., not through a WYSIWYG editor or other structured editor). Cheetah is also easier for a Python programmer -- probably easier than DTML in this case -- because it parallels Python. ZPT's promise of allowing people to edit code with a WYSIWYG editor has not panned out, and I don't think it is a practical goal at this time. | |||
| Allow embedded code | 2 | 0 | 2 |
| I disagree with the author on fundamentals here -- I think embedded code is good, though potentially dangerous. I think ZPT makes a pretty good compromise here, though depending on how you structure your code, Cheetah could be better. I can't really decide. However, DTML's embedded code is a travesty. STL's lack of simple operators (like not:) is nothing to be proud of -- ZPT's tags are all there for a reason, and I've used all of them, and it's not because I'm breaking the MVC barrier. As I've gotten more used to ZPT, I rely on Python Scripts more and ZPT less for calculations, but I still use Python often in ZPT -- how else can you make a <select> element? | |||
| Is the template valid HTML | 1 | 0 | 3 |
| Cheetah actually can be valid HTML, depending on your template, while DTML cannot. And DTML's interaction with HTML is obnoxious, e.g.: <a href="<dtml-var a_url url_quote>">. That's just horrid. There's also a downside that the author doesn't mention, that Cheetah and DTML can be used to create non-HTML (email, config files, etc), while ZPT cannot. | |||
| Elegance | 2 | 0 | 2 |
| This is obviously a subjective measure.  ZPT is tiresome to write. Cheetah allows invalid markup. DTML is tiresome to write and allows invalid markup. And so on. | |||
| Render speed | 3 | 2 | 1 |
| I'm guessing here, but these are from my general experience. Cheetah compiles to Python, so it's very fast (well, at least comparable to Python). DTML is interpreted, but ZPT is noticeably slower. |
There are perhaps some other important templating languages out there. DTML isn't an important language. No one should use DTML, unless you are developing a legacy Zope application. Or, sadly, when generating email or SQL in Zope, but that's just an unfortunate corner case. No one outside of Zope can reasonably use DTML (and there's no reason to). ZPT is the way to go (and it can be used outside of Zope: zpt.sf.net, SimpleTAL).
Some other, more interesting templating languages might be Spyce, which embeds Python in the markup (as easy to learn as Python, but obviously with issues), or htmltmpl, which is interesting in that it supports Python and PHP, and is a better example than DTML of a tag-based templating language. There's also Nevow, for another ZPT-style templating system. Finally, there's a list of templating languages on the Python Wiki, though it's not complete.
I edit ZPT in GoLive often. It took only some minor coaxing and you do have to keep an eye on what's going on when working in visual mode, but it *can* work.
Beyond that, ZPT has really really gelled in my brain, with or without a visual or structured editor. It is a weird learning curve as it's a style that's somewhere between imperative structures like Cheetah and whatever XSLT is.
Thanks to ZPT, I've stopped treating HTML textually, almost completely. Each select widget, hyperlink, becomes a living breathing object instead of merely a placeholder for a value to be inserted. I really like that it allows me to do this without my having to wrap my head around more painful DOM concepts.
ZPT *can* be used to make non-HTML files, but it's painful and is stepping outside its design goals. But it can be done (I see people do it on occasion, and I'm always shocked).
I especially agree with you on ZPT's compromise on embedded code. The TALES engine (which potentially allows other expression languages to be installed) is a really nice feature, and I like that you can use Python to do complex conditionals, extra formatting, and so on, without yet another micro-language having to be invented. The TALES engine also allows the actual TAL language definition to remain quite small and simple.
With very few exceptions, all of my sites have been much easier to maintain since moving to ZPT, and it's been a lot easier to work with our design team. The developers still add in almost all of the TAL/METAL statements when they hand us their designs, but the big savings tend to come when we have to do major design changes.
em.py is also a nice and fast templating system.# Frank
When I was looking for a new templating system for Roundup, I settled on ZPT pretty quickly. I have the occasional Roundup user who complains about the complexity (while, at the same time, being able to get the job done), but most users are happy with it. The i18n stuff in ZPT can be fiddly though.
Personally, the ZPT design (TAL, TALES, METAL) just work for me.
One issue that's come up in Roundup though is templating of plain text. As Jeffrey points out, non (HT+X)ML is something that ZPT is definitely *not* targetted at (and is why DTML persists in Zope, as you point out). Still looking for something elegant there -- I wonder if anyone's implemented a perl-format-alike in Python...
Note that SimpleTAL isn't a complete implementation, and isn't as mature. It's definitely usable, and is getting more mature though.
Ian: "There's also Nevow, for another ZPT-style templating system."
Nitpick: I think this mischaracterises Nevow somewhat, as there's a significant difference in how Nevow (specifically Nevow.renderer) and ZPT work. While ZPT keeps its basic flow control structures into HTML templates, Nevow does all flow control from Python via a programmatic interface. Templating systems like Nevow, PyMeld and my HTMLTemplate are conceptually closer to DOM and desktop-GUI systems than to macro-descended/influenced embedded templating language-based systems like PHP, Cheetah, TAL, etc.
(Historical note: It was actually ZPT that gave me the original idea for HTMLTemplate. I just took the custom tag attributes and callback-into-Python concepts, boiled them down as far as they could go, and fused them to what I already knew about DOM and application scripting.)
BTW, I'm not sure why the paper's author classes STL with PyMeld, as STL falls into the embedded language camp. He also seems to suggest that PyMeld is templating language-based, which it's not. Anyway, I thought the paper read more like a puff-piece for STL than a objective assessment of the full templating engine arena. Not that I object to puff per-se, but I do think it should have provided a full disclosure so readers will know where the author is coming from. A pity, as with all the different templating systems currently floating about it would be nice to have a really good, objective comparison to help both developers and users judge their pros and cons better.
I have bloged this at
http://davew.typepad.com/42/2004/06/ian_bicking_pyt.html
Tried trackback and it did not work.
I wanted to find out more about STL, but Olivier Guilloux's article didn't appear to provide a reference. However he mentions that STL is used by the itools community. It turns out that STL is part of J David Ibáñez's itools package.# Hamish Lawson
I'm always amused to see that "you can't generate plain text with a ZPT" given that I first read this immediately after editing an ZPT that did exactly that. It's certainly hammering a square peg into a round hole, though.
I really like ZPTs. I'm not sure why, I guess it's because they were designed by people who actually knew what a templating system was FOR.
One of my needs is to place style information into HTML. My
application uses wxPython which in turn uses wxWidgets. The
wxWidgets HTML viewer does not support style sheets, or the
class attribute. This is actually the hard part. The templating
itself is actually easy.
This is what I do at the moment:
- First pass over the template using xyaptu from the Python
cookbook. This is an example template:
http://cvs.sf.net/viewcvs.py/bitpim/bitpim/resources/pblayout.xy?view=markup
In particular note that I do use class attributes which
are ignored by the wxWidgets HTML viewer.
- Do a second pass using HTMLParser.HTMLParser which generates a
tree of the document structure (it also requires the HTML to
be perfect with *all* tags having matching closes. I then have
a file that defines styles.
http://cvs.sf.net/viewcvs.py/bitpim/bitpim/resources/styles.xy?view=markup
That says where to inject style information. The dict says what
attributes to add to the tag the class was found in (the '' case)
and then also lists how tags contained within should be modified.
Later down there are also tags that get added.
So I have a fairly big mess. I am having to simulate style-sheets,
produce 100% correct HTML and also have various value formatting
functions all over the place.
I actually like PHP's Smarty the best, mainly for the modifiers
and being able to do things like capture.
For repetitively updated information, specifically server-pushed real-time industrial process displays, I think that PyMeld is particularly appropriate (and elegant in its Pythonic simplicity). The same approach for (X)HTML extends automatically to SVG, whose future blending is represented by recent Firefox/Mozilla development. Additionally, any other templating scheme can still be used to publish "snapshots" of the displays as well.
I love PyMeld and think its a fantastic system, but in real life situations it is extremely slow in my experience. At some stage I will try and do some formal benchmarks but for a recent project (http://muti.co.za) I started off using PyMeld and then abandoned it. I found that in generating a table with multiple rows (around 30 or so) using the recipe described by the PyMeld author, it was two orders of magnitude slower than Pythons "%" native templates.
I then tried Cheetah, and although it is faster than PyMeld to my horror I found that it is 1 order of magnitude slower than straight "%" templates. This was Cheetah 1.0 (At the time I did this 2.0RC1 was out but I didnt try it). I at first thought this was because I wasnt using the compilation functionality but I found that compiling the templates produced very little difference with the same 30 line table.
I also tried the new Python 2.4 template engine in the string module, and this was disapointing in that it was marginally slower than % templates and also has no support for numeric formatting. I probably could have used Cheetah but I am very picky about performance and in the end I could not justify an order of magnitude performance hit so I am using straight % templates until I can find a higher performing template engine.
meld3 might be faster than PyMeld. For Cheetah, you lose a lot of performance with NameMapper -- if you don't use it (try taking out $'s) it might speed up significantly.
# Ian Bicking


AbstractParty |
An AbstractParty contains the common elements of Party and AnonymousParty, specifically the owning key of the party. In most cases Party or AnonymousParty should be used, depending on use-case. interface AbstractParty : Destination |
AnonymousParty |
The AnonymousParty class contains enough information to uniquely identify a Party while excluding private information such as name. It is intended to represent a party on the distributed ledger. interface AnonymousParty : AbstractParty |
CordaX500Name |
X.500 distinguished name data type customised to how Corda uses names. This restricts the attributes to those Corda supports, and requires that organisation, locality and country attributes are specified. See also RFC 4519 for the underlying attribute type definitions data class CordaX500Name |
Party |
The Party class represents an entity on the network, which is typically identified by a legal name and public key that it can sign transactions under. As parties may use multiple keys for signing and, for example, have offline backup keys, the "public key" of a party can be represented by a composite construct – a CompositeKey, which combines multiple cryptographic public key primitives into a tree structure. interface Party : AbstractParty |
PartyAndReference |
Reference to something being stored or issued by a party e.g. in a vault or (more likely) on their normal ledger. The reference is intended to be encrypted so it's meaningless to anyone other than the party. data class PartyAndReference |


“The future depends on what you do today.” – Mahatma Gandhi
My focus is on providing excellent service at the right price.
My first job was with the Federal Government as a mainframe programmer and went on to work in the private sector first with a publishing company, followed by several years with an American startup newspaper company and finally worked at a Canadian financial institution. I continuously held positions with increasing responsibility and scope. In 2011 I started a freelance career with Appen Butler as a web search evaluator and quickly moved on to other opportunities with Mortgage Executive Inc., Elance as a Certified Program Consultant working on large client accounts, Project Management Consulting with Nexibeo, Bright Solutions GmbH, One Cup Coffee Co. and others.


Rupert Murdoch Hates Google [Google]
Twitter charges Bing and Google indexing rights? Why didn’t I think of that?Apparently Murdoch is under the impression that readers who come into his vast media empire (which includes Sun, The Times, The Wall Street Journal, FOX News/movies/channel, MySpace, and I-don’t-even-remember-what-else) through Google aren’t going to lead to any sort of profit:
If they’re just search people… They don’t suddenly become loyal readers.
As those “search people” are worthless, they can be ignored and blocked in Murdoch’s world. He explains that there the only way to actually make any money on the Internet today is to charge for all content and force users to access it directly, because otherwise “no news websites or blog websites anywhere in the world making serious money.”
On one hand, good luck with cutting off one of the most used paths to any online content and then expecting a check, Rupe. On the other, if Twitter can charge Bing and Google for indexing rights, shouldn’t one of the world’s most powerful content creators be able to? [Business Insider]


Cart Total: $
0.00
JOE'S PIZZA
Joe's Pizza & Wings
Choose yer own PIZZA the adventure
Let's go!

Delicious Wings
+ 6 Count
+ 12 Count
Add to your order
0
"6 Count" and
0
"12 Count"?
Add em!
Your Cart
Cart Total:
$
0.00
Order For Takeout
Keep Shopping
JOE'S PIZZA
15051 SE FOSTER RD
PORTLAND OR
Copyright 2018
Your total is $
Thank you for your order!
We'll have it ready for you in about 45 minutes!


| Project | Completed | Task | Date | Action | |
|---|---|---|---|---|---|
|
|
UX Aspects UI project | 20 | 20% | Jul 14, 2013 | |
|
|
Hardware project | 4 | 40% | Jul 16, 2013 | |
|
|
Cloud project | 9 | 75% | Jul 18, 2013 | |
|
|
Client project | 34 | 18% | Jul 22, 2013 |


Remaps smart quotes to more logical settings for Mac. Opening and closing quotes now map to opening and closing brackets, and the shift modifier switches from single to double quotes.


-
Announcements
-
Donations and Recognition! 12/22/2016
Hello everyone! We are becoming a huge community and that doesn't come cheap. All staff here are volunteers and do this because they love the site. Right now, everything is paid out of pocket, by Erroneous. We would love for you to donate in order to help out with the site costs (i.e. Forum License, Domain Name, Hosting) so that we can keep Security and Forum Software up to date and possibly add some new features. If you do decide to donate, we have some fun, snazzy gifts of appreciation for you ;) Please message me (Shark) so we can get you the gifts of appreciation! We thank you for your support! Please use this link for more info _____________________________________________________________________________________________________________________________ How To Donate Scroll to the bottom of the screen and click the donate button.
_______________________________________________________________________________________________________________________________________________
NOTABLE DONORS LIST Here is where we honor the donors who go above and beyond the call of Aincrad! Top Tier Donors! Percival Row Teayre Nezumi Benjamin Bookworm Zandra Alice Arc Atzo Baldur Claim Corvo Dominion Genji Ignavus_veneficus Jomei Kaya Kimi Lee Lessa Mack Macradon Nocturn Persephone Piera Ruus Sarial Hawke Shi Unyeilding Vale To express our gratitude, here is a picture of the iconic duo for all you wonderful supporters! -
The SAO Staff Team! 02/21/2017
Hello members of SAO-RPG!
I'm sure most of you (if not some) have noticed or heard changes were made to the staff team. If you are applying to staff, you may have noticed that the application process has recently changed. This has all happened because of a reformation of the staff team and the way it operates. The staff now has separate teams for development. These teams are: Floor Creation Team [Floors, Quests/Events, Bosses], Systems & Clarifications Team, and Player Support Team.
"Who is on these teams?" Well the answer to that lies below! Floor Team Systems & Clarifications Team Player Support Team
Minecraft Development Team
* - Denotes Team Lead
We also have a team to work on and develop the current systems but that team will search for its members and is not allowed to be applied to.
Now you may be asking, "Shark, how does one apply to the Staff Team?" And I have but 1 simple answer!
Go read this thread and it may answer all your questions!
If you have any more questions, send me a PM and I will answer your questions about staff. (Only the format of teams and/or the application process) -
Patch Notes: Crafting and Adventuring Update 02/18/2018
<<Crafting and Adventuring Update>>
SAO-RPG Patch 2.5.1 Timeline Update! Please note that the following is out of character knowledge.
Time progresses at a different rate in the game than in our characters' real lives. As of November 6, 2017 (OOC real time), characters should have the perception that 2 years have passed since the game's launch. This will continue to roughly mirror the passage of real time until the game's completion. The note that the perception of time is different in-game is to allow the idea that a set amount of time has passed in the real world (likely 2 years) upon the game's completion, regardless of how long it takes for the site to clear all 100 floors. We hope to release more changes soon that will streamline boss fights and floor clearing, as well as help new players establish themselves despite the time gap, but hopefully this timeline serves as a helpful tool for players throughout the rest of our time spent clearing the game. Site Changes: A post count feature has been added to the site. The number of each post (i.e. #1) now displays on the top-right, beside the "Link Post" feature. General Rule Changes: Word count requirement for posts in which a player is stunned or paralyzed has been reduced to 100 from 150. PvP and Player Killing Rules have been updated: No player can kill another without OOC permission. The rule for initiative rolls on Unauthorized Combat have been removed. The NPC Guard mechanic has been removed. Characters Level 5 and under are eligible to claim a New Character Bundle, regardless of when their journal was created. Unidentified items, when obtained in a thread, no longer have to be declared until they are identified by a Merchant. For example, a weapon drop can be claimed from a locked thread as an Unidentified T1 Weapon, rather than an Unidentified T1 2H Assault Spear. When identifying an item, the Merchant should then specify the item type in their roll(s). To clarify, items leaving locked threads should be specified according to the loot tables as: Weapon, Shield, Armor, Consumable. The Loot Table has been slightly adjusted, mainly to increase the number of consumables dropped from monsters. Crafting Changes:
A note to all crafters: Be sure you are transferring your materials (col for Merchants) to the @Banker account when crafting. The <<Earning a Living>> quest has been updated, and is now profession-specific. Three new crafting/gathering-based quests have been added: <<Nature's Treasure>>, <<Witch of the West>>, and <<Challenge of Olympus>>. +CD bonuses for crafting have been reintroduced. These can be obtained through the new quests <<Challenge of Olympus>> & <<Witch of the West>>. Merchants: The chance to successfully identify a unique enhancement now scales with Merchant Rank. The identification chart for Consumables has been reworked. The process of identifying consumables has changed. Identification prices have been reduced by 20%. General stock items have been adjusted. Blank Recording Crystals have been removed, and five new items have been added: Glow Stone, Single/Double Tents, Spyglass, and Water Canister. Alchemists/Cooks: Enhancement lists for both professions have been reworked. Successful crafts now have a chance to yield additional items. The Crafting Die Result charts have been updated. Performers: Song types have been adjusted. Enhancement list has been reworked. Successful crafts now have a chance to become 'Masterpieces'. This allows the craft to be submitted for evaluation with an additional effect. Skill Changes: Hiding Mod: Surprise Attack Has been split into two mods: Surprise Attack (Assassin) Cost: 15 SP Passive Effect: Attacks made from stealth cannot miss. Attacking from stealth grants +2 DMG. Stuns and other status effects (Bleed, Paralysis, Burn, etc) cannot trigger. Cannot posses both Surprise Attack (Assassin) and Surprise Attack (Trickster). Description: You have mastered hiding, and now can move so silently that the target has no time to react, guaranteeing a hit. You focus on hitting critical zones and exploiting your target's weak points, allowing for bonus damage. Surprise Attack (Trickster) Cost: 15 SP Passive Effect: Attacks made from stealth cannot miss. Attacking from stealth reduces final damage by 50% and automatically applies all status effects (Bleed, Paralysis, Burn, etc) the player possesses on active equipment/consumables. Cannot posses both Surprise Attack (Trickster) and Surprise Attack (Assassin). Description: You have mastered hiding, and now can move so silently that the target has no time to react, guaranteeing a hit. You focus on slipping past the enemy's defenses and sacrifice strength in order to apply as many status effects as possible. Mod: Vanish Cooldown reduced to 3 Turns, from 5 Turns. Energize Can only affect target party member. Mod: Hyperactive Increases energy regeneration of target player by 3 for three turns, up from 2 for two turns. Can only affect target party member. Cooldown reduced to 3 Turns, from 5 Turns. Energy cost increased to 5, from 3. First Aid Mod: Purify Cooldown reduced to 1 Turn from 2 rounds. Mod: Sharpness Energy cost increased to 12, up from 8. Cooldown reduced to 1 Turn from 3 Turns. Mod: Barrier Energy cost increased to 12, up from 8. Cooldown reduced to 1 Turn from 3 Turns. Effect now applies a Safeguard effect to target party member that lasts until the beginning of the user's next turn. Does not stack with the Safeguard enhancement. A player can only be targeted by Barrier once per combat. Mod: Field Medic Cooldown reduced to 3 Turns, down from 5 Turns. Fighting Spirit Now affects hate-generating abilities (Howl & Focused Howl) Enhancement Changes: Thorns: Damage increased to (9 per slot * Tier) from (7 per slot * Tier). Effect has been updated to specify that only damage dealing, melee attacks trigger Thorns. [Performer] HP Recovery Reduced to (20 per slot * Tier), down from (40 * Tier) per slot. Mass HP Recovery has been removed. Monster Call has been reworked into two different enhancements: Monsters' Fortune Cost: 1 Slot Cap: 3 Slots Effect: When played, gain +1 LD per slot when rolling for loot on the next monster killed. Monsters' Favor Cost: 1 Slot Cap: 3 Slots Effect: When played, gain +1 CD per slot when rolling for loot on the next monster killed. Familiar Call Renamed to Familiar Sight. Grants +2 LD when searching for a familiar, up from +1. Incarceration Effect now applies to one target. Effect now lasts for one battle. New Enhancement: Perpetuate Cost: 3 Slots Cap: 1 Slot Effect: When played, doubles the length of damage over time effects (Bleed/Poison/Burn, etc.) on a single target. Effect lasts for one battle. Applicable to: Debuff Song Misperception Effect now applies to one target. Effect now lasts for one battle. Hypnosis Cap reduced to 2 slots, down from 3. Effect now lasts for one battle. Lullaby Cap reduced to 2 slots, down from 3. Effect now lasts for one battle. Mesmerism and Berceuse have been removed. [Alchemist] Damage No longer scales with Tier. Mitigation Reduced to (5 per slot * Tier), down from (9 per slot * Tier). HP Recovery Reduced to (20 per slot * Tier), down from (40 * Tier) per slot. Mass HP Recovery Reduced to (30 * Target's Tier), down from (45 * Tier). Over-Health Cost reduced to 1 slot, down from 3 slots. Cap increased to 3 slots, up from 1 slot. Reduced to (15 per slot * Tier), down from (50 * Tier). Antidote Effect now grants immunity to negative status effects (Paralyze, Bleed, etc.) for a number of turns equal to the slots used. For example, if a player uses an Uncommon Antidote (1 slot), and is then affected by Burn for 2 turns, they would negate the damage from the first turn, and then take the appropriate damage on the second turn, as their protection from Antidote has run out. Toxic Venom Adjusted to (8 * Tier) damage over 3 turns, from (6 * Tier) damage over 4 turns.  Cannot be used to avoid a critical hit. Applicable to: Snacks, Desserts, Meals, Feasts Mitigation Reduced to (5 per slot * Tier), down from (9 per slot * Tier). Over-Health Cost reduced to 1 slot, down from 3 slots. Cap increased to 3 slots, up from 1 slot. Reduced to (15 per slot * Tier), down from (50 * Tier). Protein Cap reduced to 2, down from 3. Effect reduced to (1 per slot) base damage and -(5 per slot * Tier) mitigation, down from (1 * Tier) base damage per slot and -(9 per slot * Tier) mitigation. Item Changes: <<Banner of Command>>, <<Banner of Leadership>>, <<Banner of Inspiration>>, <<Banner of Support>>, and <<Banner of Greater Support>> no longer have the ability to be recharged. Any players that have one of these items may continue to use them until their current number of charges have been depleted, after which they become vanity items. <<Name Tags>> now can not only change the name of an item, but the description/appearance as well. This includes any Name Tags received in the Fireworks Festival Raffle. Quest Changes: Quest Revamp: <<Earning a Living>> Whether you are looking to start crafting for the first time, or wish to change your current profession, the <<Earning a Living>> quest has been reworked and flavored for each profession. Materials gathered and a single item crafted in this quest are yours to keep, along with the ability to open a shop for your desired profession and some bonus materials to get you started. <<Earning a Living: Blacksmith>> <<Earning a Living: Tailor>> <<Earning a Living: Artisan>> <<Earning a Living: Alchemist>> <<Earning a Living: Cook>> <<Earning a Living: Performer>> <<Earning a Living: Merchant>> Quest Revamp: <<Witch of the West>> Witch of the West is a quest specifically for players who have a profession that takes place on floor fifteen. By defeating the monsters and the boss players can receive a +CD consumable for their profession specifically. By taking the quest again, you do not have to fight the boss but still must face the mobs in order to obtain the item. Quest Revamp <<The Iron Guardian> Loot drop changed from the <<Banner of Support>> to the <<Crystal of Support>> a mass healing crystal. New Quest: <<Nature's Treasure>> On each tier's first floor, players are able to take the quest. The quest itself is designed to make material grinding easier whether you are actively searching for materials, fishing for materials, or fighting mobs for materials. New Quest: <<Challenge Of Olympus>> After reaching Rank 2 in a profession, players are eligible for a quest on the seventeenth floor in which they have a chance to accept a challenge from one of the Greek Gods/Goddesses in order to prove their worth as a crafter. This is an RP-focused quest for players who enjoy crafting, which awards a permanent +CD item to be used in a shop. <<Challenge Of Olympus: Blacksmith>> <<Challenge Of Olympus: Tailor>> <<Challenge Of Olympus: Artisan>> <<Challenge Of Olympus: Alchemist>> <<Challenge Of Olympus: Cook>> <<Challenge Of Olympus: Performer>> <<Challenge Of Olympus: Merchant>> New Quest: <<Trouble in The Mines>> Mining on Floor Twenty One has ceased to a halt with the appearance of Drakelings in the mines. The town has requested your help in clearing them out, so they can resume work. Of course, bringing back proof of your exploits will be rewarded handsomely. New Quest: <<Betrayal of The King>> Rumors of an old king long forgotten have began to resurface, bringing about fear that he had been resurrected. It is up to the players to stop him, and return this dangerous King back to the land of the dead. Those who complete this task will be reward not only with Col and SP, but the chance to obtain T3 equipment. New Quest: <<The Hidden Village>> Players have been tasked with finding out more about the town of Charko, which has remained shrouded in shadow. Though the trip through the tunnels does not prove to be simple, as powerful monsters stand in the way of the players' discovery. After bypassing these mobs through either combat or stealth, it will be up to them to determine whether Charko stays a secret, or is revealed. New Quest: <<Burning Phoenix Feathers>> Rumors of a powerful item that can change the look or description of an item have surfaced, and that these Name Tags are dropped by a powerful phoenix. New Quest: <<Bane of Blood>> Word has been received that upon the fifteenth floor, a new more vicious wolf alpha has been terrorizing travelers and merchants. Bulletins of the beast are posted on exits to the city. Many merchants are fearful to travel around, and the city is becoming more afraid of not being able to get the supplies they need. Towns have gathered col and a few other rewards for the person or party who hunts down these powerful beasts and returns for the reward alive. New Quest: <<The Swashbuckling Buccaneer>> Players will find themselves fighting against a crew of cunning pirates in the hopes of being rewarded handsomely with Col and other treasure. New Quest: <<Keep Calm and Ki'Raion>> Rumour spreads of an exceedingly powerful monster, hidden deep in the far Eastern reaches of the 19th floor. Those that hunt down this Field Boss will find that its patterns change depending on the time of day this boss is discovered. Players will be rewarded with Col, SP, and Equipment for the defeat of this boss. New Quest: <<The King of Lakes>> At the bottom of the Lake of Reflections lurks a powerful aquatic monster that has evaded many fisherman's lines for months. However, one fisherman has revealed he may know the trick to fishing him up. He sends you out to retrieve the bait before giving you a shot at catching the powerful King of Lakes. New Quest: <<What We Fight For>> Deep in the Forest of Memories lies a chamber that has been said to reveal to players what they miss most of their real world outside of SAO. Housing Changes: Guild Hall Costs have been reduced. Room upgrade cost lowered to 15,000 col. Players who have spent col to upgrade rooms since the initial housing update have been reimbursed. Living Room Effect changed to: “Increases HP regen by (5 * Tier HP) and decreases full energy regen to 2 Out of Combat Posts” Dining Room, Living Room, Master Bedroom, Master Bathroom, Extended Workshop, and Mega Slime Farm slot cost reduced to 1, down from 2. Dining Hall room slot cost reduced to 2, down from 4. Removed restriction for having both a Basic Kitchen and a Chef’s Kitchen. Basic Kitchen is now able to create Tier-specific food items. The material costs for using a Basic Kitchen has slightly increased. Limited the maximum number of items created per thread to 3. Dining Hall and Dining Room effects have been reworked. Basement buff increased to +2 from +1. Cooldown changed to once every 10 posts(total), from once per thread. Clarification added: Food items created with a Basic Kitchen may be traded to and used by other players, but still may not be used outside of the thread they are created. The ability to Upgrade/Downgrade Plots of Land has been added.
-
Privacy Policy
The team here at Sword Art Online Roleplay Community respect your privacy and will not share any of your registration information at any time with any users, partners, affiliates, third-party contents without your expressed written permission. In addition, all information stored in our database, while protected by security systems and our privacy terms, is viewable only to the highest level of staff member on this site; this includes your posts, internet service provider, email address, encrypted password, private messages, and file uploads. Therefore if you wish not for any of the mentioned related information to be saved on our database, please do not share or provide any said information without thorough consideration on your part.


--- layout: default --- {% comment %} This is a page template. A page outputs content just like any other post, and has all the same attributes by default, but you can also customise it to behave differently if you prefer. {% endcomment %} Inicio {% if site.subscribe %}Suscribirse{% endif %} {{page.title}} {{content}}


ocular []. surface ACE eye coronavirus viral respiratory receptor [], {border-style chloroquine infection SARS-CoV- human px;} transmission #ffffff;} virus Med tear area entry systemic treatment Res patients study Ophthalmol azithromycin Fig. hydroxychloroquine replication topical zinc COVID- binding disease drug effects used [,]. activity conjunctival film influenza inhibitors pathway risk severe slit viruses â€" Eye drugs exposure including lamp patient potential px; receptors syndrome vitro {font-family Apr However, Infect acute angiotensin cell cells cellular corneal enzyme epithelial eyes font-size lacrimal likely novel potentially studies (Fig. Dis Ocular SARS Table Virol antiviral associated breathing clinical coronaviruses distance double; drainage dry early epidemic exposed high include infected inhibitor mouth periocular point protection protein provide role skin tissue total toxicity tropism zone Chloroquine Elsevier RNA Surface Thus, angiotensin-converting bind blocking border-color border-width centre combination direct drops efficacy factor factors highly immune information inhibiting large lipid local long management mannequin nasal previously protease rate recognized represents solid; superficial topically tract trials {font-style {font-weight (for Sci Y., [,], activity, agents ahead airborne apparent appears bold case chloroquine, comparative courier; denotes developed directly dosage effect em; evidence expression flow given hospital initial intervention. invasion known lamps layer mechanism ophthalmic ophthalmologists outbreak particles play pt;} reported resource safety shown spike system. targeting time upper use using â€"Â


Date Ni8 is a 2 player game, where both the characters, have to reach their date, together......
Or they will be alone for eternity, because they are programmers.
MIT APP:
Partner(s):Trinh Do
Dice is a simple Dice app, which you can use to roll up to 6 dice, and also play a guessing game.


Help Senior
Citizens
qui officia deserunt mollit anim id est laborum.
Bushwick viral skateboard cold-pressed godard. Cliche narwhal austin, godard stumptown butcher pour-over umami offal art party kitsch flex itarian artisan chia. Sartorial narwhal ethical listicle meggings cardigan four dollar toast. Bushwick cred scenester pork belly. Master cleanse venmo ugh, artisan crucifix photo booth wayfarers. Sartorial narwhal ethical listicle meggings cardigan four dollar toast.
Bushwick viral skateboard cold-pressed godard. Cliche narwhal austin, godard stumptown butcher pour-over umami offal art party kitsch flex itarian artisan chia. Sartorial narwhal ethical listicle meggings cardigan four dollar toast. Bushwick cred scenester pork belly. Master cleanse venmo ugh, artisan crucifix photo booth wayfarers. Sartorial narwhal ethical listicle meggings cardigan four dollar toast.
Bushwick viral skateboard cold-pressed godard. Cliche narwhal austin, godard stumptown butcher pour-over umami offal art party kitsch flex itarian artisan chia. Sartorial narwhal ethical listicle meggings cardigan four dollar toast. Bushwick cred scenester pork belly. Master cleanse venmo ugh, artisan crucifix photo booth wayfarers. Sartorial narwhal ethical listicle meggings cardigan four dollar toast.


--- layout: page title: Teaching subtitle: Few of My Projects are listed below desc: Few of My Projects permalink: /projects/ ---
Gantry girder Design Excel sheet


We are very excited to bring Il Coniglio to you. Here, you’ll be immersed in a French/Italian amalgam, echoing old world comfort while advancing gastronomic technique and embracing monumental hybrid design. Matchlessly blurring the lines between kitchen and dining room, this interactive yet distinguished approach will uniquely fulfill your desire to be a part of the culinary experience while still feeling like an honored guest. Il Coniglio will showcase Chef Dirk’s state of the art cuisine in a shared environment, creating an untapped culture for casual fine dining.
Investor Information
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip.


âˆ’. <. rodent TVDI HFRS food â€". host population NDVI []. density {border-style model px;} #ffffff;} ARIMA(,,) LST monthly variables AP(Lag) NDVI(Lag) SARIMA(,,)(,,) TVDI(Lag) LST(Lag) data available climatic dynamics study rodents series Hunan [], factors species Changsha fever hantavirus human index China climate Changsha, fluctuations px; renal syndrome used {font-family âˆ’.E- Infect analysis font-size hemorrhagic incidence significant temperature using ARIMAX Dis: Figure Food Population double; important mean results time vegetation Changsha. China. Data associated autocorrelation border-color border-width correlation density. fit highest predicted solid; supply total {font-style {font-weight ARIMA ARIMAX(,,) Available China, Disease MODIS Science analyses areas availability bank best bold cases courier; data. disease effects em; examine final host, number observed potential pt;} relationship reservoir respectively. rice univariate virus voles


|
JS9 supports two styles of menubar: the default classic style
(all top-level menus are displayed in the menubar) and a mac style
(some top-level menus are in the View menu). Specify the style globally
by setting JS9.globalOpts.menubarStyle to "mac" or "classic".
Specify a style for specific menubar by using the data-style
attribute on that element.
You also can display user-defined menus by setting the JS9.globalOpts.userMenuBar to an array of menu options, and then either setting JS9.globalOpts.userMenus to true for all menubars or setting the data-usermenus attribute to "true" for a specific menubar. See js9usermenus.js and js9usermenus.css for an example of a user menubar array and associated CSS overrides from the default CSS values in js9.css. Note that supermenus support styles and user menus, as shown in the examples below the image displays. |
|||
|
A classic menubar displaying all top-level menus:
Super-menus of style classic, mac, mac/user to control both displays:
|
A Mac-style menubar (top-level menus in View) and user-defined menus:
|


This course is focused squarely on user experience, and seeks to show developers how thinking offline-first is the best way to ensure that applications perform their best in all scenarios, not just ideal ones. You'll learn to recognize the differences between good, poor, intermittent, and missing connectivity for your users , and master how to make applications that navigate these conditions with ease.
Using the skills you master in this course, you'll conclude by building an app that that works both online and offline, and loads in new data when it can. You'll be a master of the cache! Your web apps will interact with the network just like native apps do. This will lead to better user experiences even in traditionally challenging connection scenarios like being stuck in a train tunnel, having to rely on over-crowded conference Wi-Fi, or traveling through a cellular “dead zone!”
This is a free course offered through Udacity
Take Course


public class Group
extends java.lang.Object
| Modifier and Type | Field and Description |
|---|---|
int |
code |
static int |
EMPTY |
mpjdev.Group |
mpjdevGroup |
| Constructor and Description |
|---|
Group(mpjdev.Group mpjdevGroup) |
| Modifier and Type | Method and Description |
|---|---|
static int |
Compare(Group group1,
Group group2)
Compare two groups.
|
static Group |
Difference(Group group1,
Group group2)
Result contains all elements of the first group that are not in the second
group.
|
Group |
Excl(int[] ranks)
Create a subset group excluding specified processes.
|
void |
finalize()
Destructor.
|
void |
free()
This method frees this group object.
|
Group |
Incl(int[] ranks)
Create a subset group including specified processes.
|
static Group |
Intersection(Group group1,
Group group2)
Set intersection of two groups.
|
Group |
Range_excl(int[][] ranges)
Create a subset group excluding processes specified by strided intervals of
ranks.
|
Group |
Range_incl(int[][] ranges)
Create a subset group including processes specified by strided intervals of
ranks.
|
int |
Rank()
Rank of this process in group.
|
int |
Size()
Size of group.
|
static int[] |
Translate_ranks(Group group1,
int[] ranks1,
Group group2)
Translate ranks within one group to ranks within another.
|
static Group |
Union(Group group1,
Group group2)
Set union of two groups.
|
public static final int EMPTY
public int code
public mpjdev.Group mpjdevGroup
public void free()
public int Size() throws MPIException
| returns: | number of processors in the group |
Java binding of the MPI operation MPI_GROUP_SIZE.
MPIException
public int Rank() throws MPIException
| returns: | rank of the calling process in the group |
Java binding of the MPI operation MPI_GROUP_RANK. Result value is MPI.UNDEFINED if this process is not a member of the group.
MPIException
public static int[] Translate_ranks(Group group1, int[] ranks1, Group group2) throws MPIException
| group1 | a group |
| ranks1 | array of valid ranks in group1 |
| group2 | another group |
| returns: | array of corresponding ranks in group2 |
Java binding of the MPI operation MPI_GROUP_TRANSLATE_RANKS.
Result elements are MPI.UNDEFINED where no correspondence exists.
MPIException
public static int Compare(Group group1, Group group2) throws MPIException
| group1 | first group |
| group2 | second group |
| returns: | result |
Java binding of the MPI operation MPI_GROUP_COMPARE.
MPI.IDENT results if the group members and group order are exactly the same in both groups. MPI.SIMILAR results if the group members are the same but the order is different. MPI.UNEQUAL results otherwise.
MPIException
public static Group Union(Group group1, Group group2) throws MPIException
| group1 | first group |
| group2 | second group |
| returns: | union group |
Java binding of the MPI operation MPI_GROUP_UNION.
MPIException
public static Group Intersection(Group group1, Group group2) throws MPIException
| group1 | first group |
| group2 | second group |
| returns: | intersection group |
Java binding of the MPI operation MPI_GROUP_INTERSECTION.
MPIException
public static Group Difference(Group group1, Group group2) throws MPIException
| group1 | first group |
| group2 | second group |
| returns: | difference group |
Java binding of the MPI operation MPI_GROUP_DIFFERENCE.
MPIException
public Group Incl(int[] ranks) throws MPIException
| ranks | ranks from this group to appear in new group |
| returns: | new group |
Java binding of the MPI operation MPI_GROUP_INCL.
MPIException
public Group Excl(int[] ranks) throws MPIException
| ranks | ranks from this group not to appear in new group |
| returns: | new group |
Java binding of the MPI operation MPI_GROUP_EXCL.
MPIException
public Group Range_incl(int[][] ranges) throws MPIException
| ranges | array of integer triplets |
| returns: | new group |
Java binding of the MPI operation MPI_GROUP_RANGE_INCL.
The triplets are of the form (first rank, last rank, stride) indicating ranks in this group to be included in the new group. The size of the first dimension of ranges is the number of triplets. The size of the second dimension is 3.
MPIException
public Group Range_excl(int[][] ranges) throws MPIException
| ranges | array of integer triplets |
| returns: | new group |
Java binding of the MPI operation MPI_GROUP_RANGE_EXCL.
Triplet array is defined as for Range_incl, the ranges indicating ranks in this group to be excluded from the new group.
MPIException
public void finalize() throws MPIException
Java binding of the MPI operation MPI_GROUP_FREE.
finalize
in class java.lang.Object
MPIException


In this project, you'll use generative adversarial networks to generate new images of faces.
You'll be using two datasets in this project:
Since the celebA dataset is complex and you're doing GANs in a project for the first time, we want you to test your neural network on MNIST before CelebA. Running the GANs on MNIST will allow you to see how well your model trains sooner.
If you're using FloydHub, set data_dir
to "/input" and use the FloydHub data ID "R5KrjnANiKVhLWAkpXhNBe".
# data_dir = './data'
# FloydHub - Use with data ID "R5KrjnANiKVhLWAkpXhNBe"
data_dir = '/input'
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import helper
helper.download_extract('mnist', data_dir)
helper.download_extract('celeba', data_dir)
show_n_images = 25
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
%matplotlib inline
import os
from glob import glob
from matplotlib import pyplot
mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'mnist/*.jpg'))[:show_n_images], 28, 28, 'L')
pyplot.imshow(helper.images_square_grid(mnist_images, 'L'), cmap='gray')
The CelebFaces Attributes Dataset (CelebA) dataset contains over 200,000 celebrity images with annotations. Since you're going to be generating faces, you won't need the annotations. You can view the first number of examples by changing show_n_images
.
show_n_images = 25
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'img_align_celeba/*.jpg'))[:show_n_images], 28, 28, 'RGB')
pyplot.imshow(helper.images_square_grid(mnist_images, 'RGB'))
Since the project's main focus is on building the GANs, we'll preprocess the data for you. The values of the MNIST and CelebA dataset will be in the range of -0.5 to 0.5 of 28x28 dimensional images. The CelebA images will be cropped to remove parts of the image that don't include a face, then resized down to 28x28.

You'll build the components necessary to build a GANs by implementing the following functions below:
model_inputs
discriminator
generator
model_loss
model_opt
train
This will check to make sure you have the correct version of TensorFlow and access to a GPU
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
from distutils.version import LooseVersion
import warnings
import tensorflow as tf
# Check TensorFlow Version
assert LooseVersion(tf.__version__) >= LooseVersion('1.0'), 'Please use TensorFlow version 1.0 or newer. You are using {}'.format(tf.__version__)
print('TensorFlow Version: {}'.format(tf.__version__))
# Check for a GPU
if not tf.test.gpu_device_name():
warnings.warn('No GPU found. Please use a GPU to train your neural network.')
else:
print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
Implement the model_inputs
function to create TF Placeholders for the Neural Network. It should create the following placeholders:
image_width
, image_height
, and image_channels
.z_dim
.Return the placeholders in the following the tuple (tensor of real input images, tensor of z data)
import problem_unittests as tests
def model_inputs(image_width, image_height, image_channels, z_dim):
"""
Create the model inputs
:param image_width: The input image width
:param image_height: The input image height
:param image_channels: The number of image channels
:param z_dim: The dimension of Z
:return: Tuple of (tensor of real input images, tensor of z data, learning rate)
"""
# TODO: Implement Function
input_real = tf.placeholder(tf.float32, (None, image_width, image_height, image_channels), name='input_real')
input_fake = tf.placeholder(tf.float32, (None, z_dim), name='input_fake')
learning_rate = tf.placeholder(tf.float64, None, name='learning_rate')
return input_real, input_fake, learning_rate
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_inputs(model_inputs)
Implement discriminator
to create a discriminator neural network that discriminates on images
. This function should be able to reuse the variabes in the neural network. Use tf.variable_scope
with a scope name of "discriminator" to allow the variables to be reused. The function should return a tuple of (tensor output of the discriminator, tensor logits of the discriminator).
def discriminator(images, reuse=False):
"""
Create the discriminator network
:param image: Tensor of input image(s)
:param reuse: Boolean if the weights should be reused
:return: Tuple of (tensor output of the discriminator, tensor logits of the discriminator)
"""
# TODO: Implement Function
with tf.variable_scope('discriminator', reuse=reuse):
alpha = 0.2
# Input layer is 28x28x(3 or 1)
x0 = tf.layers.conv2d(images, 32, 5, strides=2, padding='same')
x0 = tf.maximum(alpha * x0, x0)
# 14x14x32
x1 = tf.layers.conv2d(x0, 64, 5, strides=2, padding='same')
x1 = tf.layers.batch_normalization(x1, training=True)
x1 = tf.maximum(alpha * x1, x1)
# 7x7x64
x2 = tf.layers.conv2d(x1, 128, 5, strides=2, padding='same')
x2 = tf.layers.batch_normalization(x2, training=True)
x2 = tf.maximum(alpha * x2, x2)
# 4x4x128
x3 = tf.layers.conv2d(x2, 256, 5, strides=2, padding='same')
x3 = tf.layers.batch_normalization(x3, training=True)
x3 = tf.maximum(alpha * x3, x3)
# now size is 2x2x256
x4 = tf.reshape(x3, (-1, 2*2*256))
logits = tf.layers.dense(x4, 1)
out = tf.sigmoid(logits)
return out, logits
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_discriminator(discriminator, tf)
Implement generator
to generate an image using z
. This function should be able to reuse the variabes in the neural network. Use tf.variable_scope
with a scope name of "generator" to allow the variables to be reused. The function should return the generated 28 x 28 x out_channel_dim
images.
def generator(z, out_channel_dim, is_train=True):
"""
Create the generator network
:param z: Input z
:param out_channel_dim: The number of channels in the output image
:param is_train: Boolean if generator is being used for training
:return: The tensor output of the generator
"""
# TODO: Implement Function
with tf.variable_scope('generator', reuse=not(is_train)):
alpha=0.2
# First fully connected layer
x1 = tf.layers.dense(z, 4*4*512)
x1 = tf.reshape(x1, (-1, 4, 4, 512))
x1 = tf.layers.batch_normalization(x1, training=is_train)
x1 = tf.maximum(alpha * x1, x1)
# 4x4x512
x2 = tf.layers.conv2d_transpose(x1, 128, 4, strides=1, padding='valid')
x2 = tf.layers.batch_normalization(x2, training=is_train)
x2 = tf.maximum(alpha * x2, x2)
# 8x8x128
x3 = tf.layers.conv2d_transpose(x2, 64, 5, strides=2, padding='same')
x3 = tf.layers.batch_normalization(x3, training=is_train)
x3 = tf.maximum(alpha * x3, x3)
# 16x16x64
x4 = tf.layers.conv2d_transpose(x3, 32, 5, strides=2, padding='same')
x4 = tf.layers.batch_normalization(x4, training=is_train)
x4 = tf.maximum(alpha * x4, x4)
# 32x32x32
# Output layer, 32x32x3
logits = tf.layers.conv2d_transpose(x4, out_channel_dim, 5, strides=1, padding='same')
out = tf.tanh(logits)
return out
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_generator(generator, tf)
Implement model_loss
to build the GANs for training and calculate the loss. The function should return a tuple of (discriminator loss, generator loss). Use the following functions you implemented:
discriminator(images, reuse=False)
generator(z, out_channel_dim, is_train=True)
def model_loss(input_real, input_z, out_channel_dim):
"""
Get the loss for the discriminator and generator
:param input_real: Images from the real dataset
:param input_z: Z input
:param out_channel_dim: The number of channels in the output image
:return: A tuple of (discriminator loss, generator loss)
"""
# TODO: Implement Function
g_model = generator(input_z, out_channel_dim)
d_model_real, d_logits_real = discriminator(input_real)
d_model_fake, d_logits_fake = discriminator(g_model, reuse=True)
d_loss_real = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real, labels=tf.ones_like(d_model_real)))
d_loss_fake = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.zeros_like(d_model_fake)))
g_loss = tf.reduce_mean(
tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.ones_like(d_model_fake)))
d_loss = d_loss_real + d_loss_fake
return d_loss, g_loss
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_loss(model_loss)
Implement model_opt
to create the optimization operations for the GANs. Use tf.trainable_variables
to get all the trainable variables. Filter the variables with names that are in the discriminator and generator scope names. The function should return a tuple of (discriminator training operation, generator training operation).
def model_opt(d_loss, g_loss, learning_rate, beta1):
"""
Get optimization operations
:param d_loss: Discriminator loss Tensor
:param g_loss: Generator loss Tensor
:param learning_rate: Learning Rate Placeholder
:param beta1: The exponential decay rate for the 1st moment in the optimizer
:return: A tuple of (discriminator training operation, generator training operation)
"""
# TODO: Implement Function
# Get weights and bias to update
t_vars = tf.trainable_variables()
d_vars = [var for var in t_vars if var.name.startswith('discriminator')]
g_vars = [var for var in t_vars if var.name.startswith('generator')]
# Optimize
with tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)):
d_train_opt = tf.train.AdamOptimizer(learning_rate, beta1=beta1).minimize(d_loss, var_list=d_vars)
g_train_opt = tf.train.AdamOptimizer(learning_rate, beta1=beta1).minimize(g_loss, var_list=g_vars)
return d_train_opt, g_train_opt
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_opt(model_opt, tf)
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import numpy as np
def show_generator_output(sess, n_images, input_z, out_channel_dim, image_mode):
"""
Show example output for the generator
:param sess: TensorFlow session
:param n_images: Number of Images to display
:param input_z: Input Z Tensor
:param out_channel_dim: The number of channels in the output image
:param image_mode: The mode to use for images ("RGB" or "L")
"""
cmap = None if image_mode == 'RGB' else 'gray'
z_dim = input_z.get_shape().as_list()[-1]
example_z = np.random.uniform(-1, 1, size=[n_images, z_dim])
samples = sess.run(
generator(input_z, out_channel_dim, False),
feed_dict={input_z: example_z})
images_grid = helper.images_square_grid(samples, image_mode)
pyplot.imshow(images_grid, cmap=cmap)
pyplot.show()
Implement train
to build and train the GANs. Use the following functions you implemented:
model_inputs(image_width, image_height, image_channels, z_dim)
model_loss(input_real, input_z, out_channel_dim)
model_opt(d_loss, g_loss, learning_rate, beta1)
Use the show_generator_output
to show generator
output while you train. Running show_generator_output
for every batch will drastically increase training time and increase the size of the notebook. It's recommended to print the generator
output every 100 batches.
def train(epoch_count, batch_size, z_dim, learning_rate, beta1, get_batches, data_shape, data_image_mode):
"""
Train the GAN
:param epoch_count: Number of epochs
:param batch_size: Batch Size
:param z_dim: Z dimension
:param learning_rate: Learning Rate
:param beta1: The exponential decay rate for the 1st moment in the optimizer
:param get_batches: Function to get batches
:param data_shape: Shape of the data
:param data_image_mode: The image mode to use for images ("RGB" or "L")
"""
# TODO: Build Model
_, image_width, image_height, image_channels = data_shape
input_real, input_fake, lr = model_inputs(image_width, image_height, image_channels, z_dim)
d_loss, g_loss = model_loss(input_real, input_fake, image_channels)
d_opt, g_opt = model_opt(d_loss, g_loss, learning_rate, beta1)
steps = 0
print_every = 10
show_every = 100
losses = []
n_images = 25
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch_i in range(epoch_count):
for batch_images in get_batches(batch_size):
# TODO: Train Model
steps += 1
batch_images *= 2
batch_z = np.random.uniform(-1, 1, size=(batch_size, z_dim))
_ = sess.run(d_opt, feed_dict={ input_real: batch_images, input_fake: batch_z, lr: learning_rate })
_ = sess.run(g_opt, feed_dict={ input_fake: batch_z, input_real: batch_images, lr: learning_rate })
if steps % print_every == 0:
train_loss_d = d_loss.eval({input_fake: batch_z, input_real: batch_images})
train_loss_g = g_loss.eval({input_fake: batch_z})
print("Epoch {}/{}...".format(epoch_i+1, epoch_count),
"Discriminator Loss: {:.4f}...".format(train_loss_d),
"Generator Loss: {:.4f}".format(train_loss_g))
losses.append((train_loss_d, train_loss_g))
if steps % show_every == 0:
show_generator_output(sess, n_images, input_fake, image_channels, data_image_mode)
Test your GANs architecture on MNIST. After 2 epochs, the GANs should be able to generate images that look like handwritten digits. Make sure the loss of the generator is lower than the loss of the discriminator or close to 0.
batch_size = 64
z_dim = 100
learning_rate = 0.001
beta1 = 0.5
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 2
mnist_dataset = helper.Dataset('mnist', glob(os.path.join(data_dir, 'mnist/*.jpg')))
with tf.Graph().as_default():
train(epochs, batch_size, z_dim, learning_rate, beta1, mnist_dataset.get_batches,
mnist_dataset.shape, mnist_dataset.image_mode)
Run your GANs on CelebA. It will take around 20 minutes on the average GPU to run one epoch. You can run the whole epoch or stop when it starts to generate realistic faces.
batch_size = 64
z_dim = 100
learning_rate = 0.0001
beta1 = 0.5
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 1
celeba_dataset = helper.Dataset('celeba', glob(os.path.join(data_dir, 'img_align_celeba/*.jpg')))
with tf.Graph().as_default():
train(epochs, batch_size, z_dim, learning_rate, beta1, celeba_dataset.get_batches,
celeba_dataset.shape, celeba_dataset.image_mode)
When submitting this project, make sure to run all the cells before saving the notebook. Save the notebook file as "dlnd_face_generation.ipynb" and save it as a HTML file under "File" -> "Download as". Include the "helper.py" and "problem_unittests.py" files in your submission.


Shell UK gender pay gap widens slightly in 2019
Royal Dutch Shell's gender pay gap in Britain edged higher in 2019 following the acquisition of a utility company, with women earning on average 18.7per cent less than men.
LONDON: Royal Dutch Shell's gender pay gap in Britain edged higher in 2019 following the acquisition of a utility company, with women earning on average 18.7per cent less than men.
This year's figure, which compares to 18.6per cent in 2018, comes after Shell UK incorporated around 1,000 employees from First Utility which it had acquired in March, Shell said in a report.
Excluding First Utility, which was re-branded Shell Energy, the pay gap would have narrowed to 15.1per cent.
Gender gap pay is defined as the difference in the average pay and bonuses of all men and women across an organization.
"We have made good progress in building an inclusive and diverse workplace, and we have increased the proportion of women in senior leadership positions," Sinead Lynch, Shell UK Country Chair, said in a statement.
"However, we still have further to go and will continue to work to close the gender pay gap across all parts of the business."
The oil and gas sector has traditionally had a much higher ratio of men to women. In April 2019, Shell employed more than 6,000 employees in Britain, of whom two-thirds are men.
Shell said its UK gender pay gap stems from having fewer women in senior leadership positions as well as in specialist roles attracting higher levels of pay such as trading.
"Our gender pay gap also reflects wider societal issues such as relatively fewer women studying science, technology, engineering and mathematics subjects at university," Shell said in a statement.
Shell UK said it had achieved its ambition to reach 30per cent women in senior leadership positions by 2020 which it aims to increase to 35per cent by 2025.
(GRAPHIC: Shell 2019 gender pay gap - https://fingfx.thomsonreuters.com/gfx/ce/7/7448/7430/Pastedper cent20Image.jpg )
(Reporting by Ron Bousso; editing by James Drummond)