Advice and tips on how to prepare for and maximize your experience at the Grace Hopper Celebration!
Read PostSo you’re going to the Grace Hopper Celebration. Congratulations!
This post is here to help you make the most of your experience. Whether your goal is to attend the talks and workshops, meet professors and students in academia, network with other women in tech, or land a job/internships; we hope to guide you to that goal.
First things, first: packing.
Pack light for the conference.
You will bring home tons of swag! Last year, my bag was packed to the brim with water bottles, totes, t-shirts, puzzles, exercise bands, travel bottles, etc. Anything you can think of, I brought it home.
Since the trip is only three days, you can get away with bringing a large backpack or duffel. However, I would advise instead to pack a light backpack that’s comfortable to carry around with you at the conference.
Yes, you want something to wear on your back because you’ll be toting around resumes, business cards, possibly a scarf or sweater if it gets cold, and of course, your free conference swag. It’s going to get tiresome to carry all of that in your hands.
 This should not be checked luggage. Avoid your luggage getting lost and your conference attire getting lost with it. Make sure the duffel or tote meet’s your airline’s requirements for carry-on baggage.
Next, bring a laptop and laptop charger with you. If you don’t have a laptop, that’s okay. The business center at your hotel should have computers available for you to access and print documents. If you’re staying at a popular hotel, you’ll want to get to the business center early in the morning.
Don’t forget your phone and email on it as well as 2 chargers! Yes, two. One to bring to the conference (which you may or may not lose) and one to leave in your hotel room. You can probably count on picking up a free charger from conference swag too!
Consider packing an e-reader or iPad for the plane ride. Whatever you prefer. Paper books are great too :)
The conference is pretty laid back in terms of dress and the attire I’ve seen ranges from business professional (usually speakers) to casual. You want to be somewhere in the middle of this.
If you are interviewing or expecting to interview at GHC, ask the company rep about interview attire so you can gauge what’s appropriate for the interview.
For bottoms, err on the side of caution and pack two semi-dressy pants (think chinos) or a flattering skirt (about knee-length), if you prefer. Dresses are perfectly fine too!
For tops, pack two blouses (or at least 1). Doesn’t have to be fancy in any way or overly dressy.
In general, you’ll find you can probably get away with a t-shirt and jeans the entire team but it really does depend on the company you’re interviewing with. Business casual is a good “in the middle” bet so you’re not overdressed or under-dressed.
Besides, you will have enough t-shirts from swag to wear throughout the conference! Just in case, have a t-shirt you can throw on and a pair of jeans to switch into for night events and dinners.
For shoes, one pair of nice flats that are comfortable to walk around in as well as a pair of sneakers is great. Socks as well for those sneakers.
For the airport, wear some shoes you can easily remove (ideally those sneakers just mentioned) and whatever clothes are comfortable to sit in for several hours.
Flip-flops for the shower. Thank me later.
This is the bare minimum. You should wear whatever you feel most comfortable in that represents you. Of course, you are welcomed to bring more clothing with you but leave some room for whatever you will be taking back with you.
For effective packing, roll, don’t fold your clothing. Saves a lot of space.
Bonus: your hotel may have a pool you can take a relaxing swim in later! Drop in a swimsuit for good measure.
Resumes and a nice padfolio. The 99 cent store usually has these for cheap. Otherwise, pick up a plastic and rigid folder to hold those resumes in. Count on bringing at least 40 copies just to be sure. Also check how many companies you’re interested in and bring enough to cover all of them. You will have some resumes left over and that’s okay.
Paper and pen (or two). You might find yourself taking notes during an interview or session. Alternatively, bring your laptop to take notes. However, I find using my phone or laptop to take notes makes it seem like I’m distracted and impolite.
Toiletries like toothpaste, toothbrush, lotion, and hair-care products in travel-sized containers.
Fellow curly haired gals, hotel toiletries will ruin your hair. I pack my Deva-Curl and Tahlia Waajid concoction in a small travel bottle. My hair usually lasts 3 days worn natural so I can get away with a small amount to wash and go.
Should you wear your hair natural? Heck yes! I did the entire conference last year. It’s hair, your hair. Wear it with pride.
If you wear your hair straight, pack your favorite hair styling tool because the hair dryer in your hotel bathroom probably won’t cut it.
Mints and mouthwash because you’ll be eating food throughout the conference and want to keep your breath fresh. You might forget you’re chewing gum and forget to spit out so refrain from gum.
Cracking the Coding Interview or other interview prep material so you can get a few study sessions in before interviews.
Water bottle because although you will probably get a free one, the one you bring from home is already cleaned and washed and the perfect size for you.
A small sewing kit is a good idea although not entirely necessary if you pack a back-up outfit.
High heels. Unless you’re keen on wearing them all day long and can comfortably wear them for long periods of time without wobbling, spare yourself the pain.
Anything that could trip security at the airport. I once brought 3-inch blunt scissors (forgot them in my pens container) and was stopped by security to search my bag. Seriously.
Do:
Don’t:
Your resume is the most important representation of yourself. This is the only thing sponsors will have to go off of in the beginning before they meet you in person.
Make sure it shines, represents the best possible you, and works for what you’re applying to.
You may want to consider having different versions of your resume especially if you’re considering different positions and have varying experience.
For example, if you’re applying for business analyst positions you want to highlight skills, accomplishments, and project aspects that emphasize skills necessary for a business analyst role.
If you’re applying for software engineering, make sure to include relevant skills and technologies you are comfortable speaking about.
Never add any project, language, or technology to your resume that you are not comfortable talking about or explaining as you will inevitably be asked a question about it.
However, if you ran a handful of SQL queries in MySQL Workbench before but are not entirely familiar with SQL, don’t add SQL to your list of languages and technologies. Instead, add what you used SQL for in the description of your project on your resume.
This is a way to say you’ve used the language or technology before but not completely familiar with the technology although you are capable of picking it up if given a more in-depth project.
Lastly, upload your revised resume to the GHC database a week and a few days before the conference.
Whether you’re there for the talks and workshops or to land a job or internship, you need a game plan.
You have three days and you want to get the most out of that time.
If you’re there for networking, take a look at the talks and sessions that are open and register for the ones that interest you and are in line with what you’re interested in learning more about. Chances are, the people you are looking to connect with will share similar interests and you can find them at those sessions.
The same applies if you’re there for talks and workshops. Find the sessions you want to attend and that are interesting to you and register for them.
Keep in mind that things come up and you may not be able to attend everything. In this case, take note of the sessions that will be recorded and consider skipping these as you can view them online later. You want to be in the sessions that are only available during GHC and won’t be recorded.
If you’re there for finding grad school opportunities or landing an interview/job, then you have several options.
Before you get to GHC, you want to do research on the companies/ schools/institutions you’re interested in and write down their booth number from the Career Fair map here: https://s23.a2zinc.net/Clients/abi/ghc2018/public/eventmap.aspx?thumbnail=1# (choose Career Fair and use the search on the left).
Write down a few important things to remember about each company so you know why you chose them. You’ll also want to make note of the programs and/or positions they have available that are of interest to you.
Don’t wait to apply or be found! Positions are open now for most companies so go to their career pages and apply with your best resume. They can look you up in the resume database afterward.
Find recruiters on LinkedIn from these companies and connect with them to see if they’ll be at the conference so you can meet them. Check out our Slack for a good template for this we pinned to the general channel.
Once you have a list of the companies you’re interested in, you have two options:
Alternatively, you can reverse this list and practice your elevator pitch with friends before the conference and then go to the companies that interest you the most first.
In the interest of time and accounting for the nature of a GHC career fair, it’s best to choose option 2 for career opportunities and option 1 for grad school opportunities.
The career fair (expo hall) runs from Wednesday to Friday.
On Wednesday it opens at 11:30 am and closes at 5:30 pm.
Thursday, runs from 9 am to 5:30 pm.
Friday, from 9 am to 2pm.
Wednesday:
They keynote is Wednesday morning and then the career fair is open after. Many people may want to go to lunch soon after and then go to the career fair.
If you want to maximize your opportunities, take advantage of this time on Wednesday and go to the career fair right after the keynote. Because top company booths usually get pretty swamped, you may have to deal with lines.
This is the day you want to spend the most time at the career fair so you can schedule interviews appropriately. Make a goal to land at least one interview from the career hall (or any number that’s best for you) and pick up some swag along the way.
Take 20 minute breaks to decompress and relax.
If you already have a couple of interviews scheduled, try to spend only half your time at the career fair on Wednesday and enjoy some speaker sessions.
If possible, make note of when you see crowds dying down (like during lunch, for example, may not happen) so you can use those times on Thursday.
If you have an interview scheduled, make a point to introduce yourself to the people at the company booth you’re interviewing with and let them know you’re excited for the interview.
Thursday:
Pick up where you left off the day before and head to the career fair first if you haven’t landed as many interviews as you’d like. Make sure to grab some breakfast and leave time toward the end of the day to sit in on a workshop or speaker session of your choice.
If you feel you already have enough interviews scheduled, walk around the career fair and check out new companies you hadn’t considered. Use this time for casual talk. Alternatively, find friends you can chill with for a bit before studying for any of your interviews.
Friday:
If you don’t have any interviews yet, don’t fret! Keep working your way through the career fair and learn more about what opportunities work for you. Consider companies on the outskirts and with smaller booths.
If you’re maxed out on interviews, and you’ve landed an offer you are strongly considering accepting, then enjoy the last day of the conference! Or not, up to you. :D
Avoid scheduling interviews back-to-back. This will likely drain you and leave you exhausted and wanting to go back to your room.
Leave at least 2 hours in between interviews so you can eat and relax before the next one.
Avoid scheduling more than 2 or 3 interviews a day. 3 is a lot for anyone as it could potentially be 3 hours all together of exercising your brain. However, you know yourself best and should understand your limits. Do the most you can and make time to decompress.
Ideally, it is best to interview on-site as offers are usually given same-day or the day after. If you find yourself overwhelmed with interviews, let the rep know and ask if it can be moved to a later date.
If you have not or are currently taking data structures, let your interviewer know at, not before the interview so they can set their own expectations of what questions you should be able to answer completely.
Study your resume really well and be prepared to be asked any question about what’s on your resume. Here are questions I’ve been asked:
Once you’ve mastered your resume, review prep packages sent to you by companies you’re interviewing with and check out interview reports on Glassdoor to get a sense of what type of questions you’ll be asked.
If you are doing a technical interview, and short on time, prepare for data structures and algorithms questions by reviewing Strings & Arrays in Hackerrank and be comfortable with at least two other data structures (Stacks, HashMaps, ArrayLists) that can be implemented efficiently to solve a variety of problems.
If you have at least a month left before GHC (at this point, you only have a week) try to do at least 2 easy and 2 medium hackerranks per day and throw in a couple of hard ones throughout the week if you can.
Understand OOP principles and be able to explain them to a non-technical user.
Additionally, brush up on basic syntax using the language you are most comfortable with. Not knowing a specific method in a class is fine but not ending a Java statement with a colon is harder to let slide.
That said, try to stick to one programming language so you avoid crossing and confusing yourself during interviews.
Cracking The Coding Interview is the best book to narrow down specific questions to review.
If you’re doing a behavioral interview, understand they are geared toward learning more about you and how you communicate, as well as how you would fit in with their team or company.
Do your research and know how to answer the “Why this company?” question. Know what the company does and go to their careers site to learn about their culture. Pick out the things you most connect with and share them as reasons you would like to work there.
Be genuine with your answers.
The dreaded “Tell me about yourself?” question is an opportunity to share things that aren’t on your resume like interesting hobbies and accomplishments as well as how your skills fit into the role you’re applying to. In general this question really means “What’s interesting about you and why should we hire you?”
It’s OK to be nervous.
You don’t have to answer question right away. You can always say, “hmm, let me think on this for a few seconds”. Collect your thoughts and thoughtfully respond. You don’t want to rush an answer you’re not ready to give.
If you need clarification, ask for it. Ask for a question to be repeated or better yet, repeat the question back to them in the way you understood it.
For example, “Do you mean, X?”
This allows the interviewer to review your understanding of the question and rephrase it if needed.
You also want to treat this as a conversation. Smile. Chuckle if the interviewer is funny.  They want to be connected in some way and find something to latch on to to make it easier to move you forward.
Ask thoughtful questions like:
This is not the ideal time to ask about compensation, relocation, etc.
However, you do, want to ask questions that are important for you to learn about the company (typically also asked during an HR screening call).
If you’re interested in continued learning opportunities, ask about what their culture around continued learning is and what resources (if any) are available to employees looking to increase their technical knowledge.
If you’re interested in mentoring, ask if they have a mentoring structure in place or how interns/full-times get on-boarded.
Essentially, you want to ask questions that benefit you as well as questions that connect with the interviewer as a person.
Avoid sarcasm, jokes in poor taste, or anything you are doubtful about mentioning or saying that may seem inappropriate.
GHC can be a overwhelming experiences. It’s a large conference with 10,000+ people and although everyone will be spread out, it’s perfectly normal to feel lost.
If you start getting overwhelmed, take some time to regenerate and relax. Sit down and watch some funny videos, go through Instagram, do something mindless. Read a chapter of your favorite book. Call you mom to catch up during the conference. Take a nap. Eat a snack.
Anything to get your energy back up.
You don’t want to be drained halfway into the day so taking breaks is important to stay alert and focused.
Keep your goals for the day in mind and drown out everything else.
Create a chat group with friends at the conference so you all can meet up during breaks and talk about your experience so far.
Share tips! Make more friends.
Finally, if you’re there (partly) for the free stuff, this is for you. If you wait until the last day (Friday) an hour or so before the career fair closes, sponsors usually want to get rid of any swag they’ve brought with them.
Take them up on the offer! This is also a cool opportunity to make last minute connections.


New message
×
d
Home
ID
Type
Name
{% for row in data["files"] %}
{{row["id"]}}
File
{{row["name"]}}
...
delete
download
move
{% endfor %} {% for row in data["folders"] %}
{{row["id"]}}
Folder
{{row["name"]}}
...
delete
download
move
{% endfor %}


Much like if statements, which give your program the ability to make decision, switch statements can be used to infuse a bit of intelligence into any program. In fact, a switch statement is essentially a specialized version of an if statement which would otherwise have an excessive amount of ELSE IF
type statements.
Let's take a look at why they're used.
Sometimes, when infusing logic into your programs you'll run into a situation where given the value of a certain piece of data, you'll want to do something different. Normally this could be covered with an if statement, but what if you want to account for 5, 10 , even 20 possible situations?
Using an if statement, your program would soon become a mess of if statement syntax, and it wouldn't be very read-able or clear what's going on. Programmers realized this and thus Switch Statements were born!
A switch statement takes a single value, then compares it to a bunch of other values using a boolean expression. When one of these boolean expressions is true then a specific piece of code will execute.
This structure allows you to easily map a value to a piece of code that should be executed. Take a look at a simple switch statement below to get a handle on the syntax in {{.Get "lang"}}:
{{ partial "shortcodes/code" (dict "lang" (.Get "code-lang") "file" "" "Content" $.Page.Params.code.a ) }}
As you can see above, we start with a value myGrade
. Essentially we want to print out whether the student passed or failed given their grade (A or F).
{{ partial "shortcodes/spotlight" (dict "Content" "Instead of resorting to an if statement we can employ the switch. Unlike if statements which need boolean expressions inside their parenthesis, with the switch statement we're just gonna pass in a value. In this case we're passing in myGrade." ) }}
Now that we have our value, we want to set up a series of case statements. These case statements are essentially the right side of a boolean expression for equality. {{.Get "lang"}} will compare myGrade
to each of the values in the case statements ('A' and 'F') for equality. If there's a match then the code directly below the case statement will be executed.
One thing that's important to keep in mind with switch statements is that by default, {{.Get "lang"}} will try to check all of them for equality, even if it gets a match. This is different from an ELSE IF
structure where once a condition is true it stops checking the ones below.
Because {{.Get "lang"}} will automatically check every case no matter what, we need a way to prevent this (most of the time you want to prevent this). In the case of a match, I want the switch statement to stop checking the other cases.
That's where the break
keyword comes in. The break keyword tells {{.Get "lang"}} that we're done with the switch statement, and it should break out of it and move on.
Personally I've run into my fair share of bugs in programs I've written from forgetting to put break statements in. So keep this in the back of your mind.
If you examine the switch statement above you'll also notice the default
keyword. This keyword acts a lot like an ELSE
in an if statement structure. Any code below the default statement will be executed if none of the other cases get a match. Notice also that we don't need a break statement inside the default.
Generally when you have a situation where you're using a switch the default will just catch any situations that you don't want to specify in a case statement.
In the case of the program above it's printing out Invalid Grade
for any grade that's not an A
or an F
.
{{ partial "shortcodes/spotlight" (dict "Content" "Most of the time you'll want to include a default statement." ) }}
In practice, switch statement are used far less frequently than if statements. The reason is that there's far fewer situations where a switch statement is appropriate over an if statement. A good rule of thumb though is that if you need to check one value against a bunch of other values for equality, then you might need a switch!


Getting an access token with Azure AD B2C and calling a Web API
Sign-in with Microsoft Azure AD B2C
Login
Call Web API


Low Income Scheme prototype
Alpha sprint 3
Created 9 June 2016
Pensioner MVP
What we plan to test:
- Full end to end journey for Mr & Mrs Mattu persona
- Mr & Mrs Mattu would have part entitlement (HC3).
What we changed:
- Added partner questions
- Added content to tell users what they need to apply.
- Updated the prefered contact method.
- Benefits are only relevant to Mr & Mrs Mattu, based on their ages and situation.
- User can now tell us they have Premium Bonds, and the value.
- Save and restore functionality added.
What we found:
- On the done screen customers want the information about eye care help to be to the point like the explanations for other types of help.
- We tested some pages with a blind user using the JAWS screen reader, the mark up was quite good with some issues. The user liked the short to the point pages and was able to answer the questions presented to her.


BONDIC Pocket 3D Liquid Plastic Welding Kit: $14.99
by Bryan ChaffinWe have a deal on a different kind of product today, the Bondic Pocket 3D liquid plastic welding kit. This liquid plastic that only hardens when you apply an included UV light to it, allowing you to cure it only when you want. The company says it’s a four step process: clean, fill, cure and shape to fix almost anything. Check out the promo video below to see it in action. It’s $14.99 through our deal.
Check It Out: BONDIC Pocket 3D Liquid Plastic Welding Kit: $14.99


mongoc_uri_t¶
Synopsis¶
typedef struct _mongoc_uri_t mongoc_uri_t;
Description¶
mongoc_uri_t
provides an abstraction on top of the MongoDB connection URI format. It provides standardized parsing as well as convenience methods for extracting useful information such as replica hosts or authorization information.
See Connection String URI Reference on the MongoDB website for more information.
Format¶
mongodb[+srv]:// <1>
[username:password@] <2>
host1 <3>
[:port1] <4>
[,host2[:port2],...[,hostN[:portN]]] <5>
[/[database] <6>
[?options]] <7>
- “mongodb” is the specifier of the MongoDB protocol. Use “mongodb+srv” with a single service name in place of “host1” to specify the initial list of servers with an SRV record.
- An optional username and password.
- The only required part of the uri. This specifies either a hostname, IPv4 address, IPv6 address enclosed in “[” and “]”, or UNIX domain socket.
- An optional port number. Defaults to :27017.
- Extra optional hosts and ports. You would specify multiple hosts, for example, for connections to replica sets.
- The name of the database to authenticate if the connection string includes authentication credentials. If /database is not specified and the connection string includes credentials, defaults to the ‘admin’ database.
- Connection specific options.
Note
Option names are case-insensitive. Do not repeat the same option (e.g. “mongodb://localhost/db?opt=value1&OPT=value2”) since this may have unexpected results.
The MongoDB C Driver exposes constants for each supported connection option. These constants make it easier to discover connection options, but their string values can be used as well.
For example, the following calls are equal.
uri = mongoc_uri_new ("mongodb://localhost/?" MONGOC_URI_APPNAME "=applicationName");
uri = mongoc_uri_new ("mongodb://localhost/?appname=applicationName");
uri = mongoc_uri_new ("mongodb://localhost/?appName=applicationName");
Replica Set Example¶
To describe a connection to a replica set named ‘test’ with the following mongod hosts:
db1.example.com
on port27017
db2.example.com
on port2500
You would use a connection string that resembles the following.
mongodb://db1.example.com,db2.example.com:2500/?replicaSet=test
SRV Example¶
If you have configured an SRV record with a name like “_mongodb._tcp.server.example.com” whose records are a list of one or more MongoDB server hostnames, use a connection string like this:
uri = mongoc_uri_new ("mongodb+srv://server.example.com/?replicaSet=rs&appName=applicationName");
The driver prefixes the service name with “_mongodb._tcp.”, then performs a DNS SRV query to resolve the service name to one or more hostnames. If this query succeeds, the driver performs a DNS TXT query on the service name (without the “_mongodb._tcp” prefix) for additional URI options configured as TXT records.
On Unix, the MongoDB C Driver relies on libresolv to look up SRV and TXT records. If libresolv is unavailable, then using a “mongodb+srv” URI will cause an error. If your libresolv lacks res_nsearch
then the driver will fall back to res_search
, which is not thread-safe.
IPv4 and IPv6¶
If connecting to a hostname that has both IPv4 and IPv6 DNS records, the behavior follows RFC-6555. A connection to the IPv6 address is attempted first. If IPv6 fails, then a connection is attempted to the IPv4 address. If the connection attempt to IPv6 does not complete within 250ms, then IPv4 is tried in parallel. Whichever succeeds connection first cancels the other. The successful DNS result is cached for 10 minutes.
As a consequence, attempts to connect to a mongod only listening on IPv4 may be delayed if there are both A (IPv4) and AAAA (IPv6) DNS records associated with the host.
To avoid a delay, configure hostnames to match the MongoDB configuration. That is, only create an A record if the mongod is only listening on IPv4.
Connection Options¶
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_RETRYWRITES | retrywrites | If “true” and the server is a MongoDB 3.6+ replica set or sharded cluster, the driver safely retries a write that failed due to a network error or replica set failover. Only inserts, updates of single documents, or deletes of single documents are retried. |
| MONGOC_URI_APPNAME | appname | The client application name. This value is used by MongoDB when it logs connection information and profile information, such as slow queries. |
| MONGOC_URI_SSL | ssl | {true|false}, indicating if SSL must be used. (See also mongoc_client_set_ssl_opts() and mongoc_client_pool_set_ssl_opts().) |
| MONGOC_URI_COMPRESSORS | compressors | Comma separated list of compressors, if any, to use to compress the wire protocol messages. Snappy are Zlib are optional build time dependencies, and enable the “snappy” and “zlib” values respectively. Defaults to empty (no compressors). |
| MONGOC_URI_CONNECTTIMEOUTMS | connecttimeoutms | This setting applies to new server connections. It is also used as the socket timeout for server discovery and monitoring operations. The default is 10,000 ms (10 seconds). |
| MONGOC_URI_SOCKETTIMEOUTMS | sockettimeoutms | The time in milliseconds to attempt to send or receive on a socket before the attempt times out. The default is 300,000 (5 minutes). |
| MONGOC_URI_REPLICASET | replicaset | The name of the Replica Set that the driver should connect to. |
| MONGOC_URI_ZLIBCOMPRESSIONLEVEL | zlibcompressionlevel | When the MONGOC_URI_COMPRESSORS includes “zlib” this options configures the zlib compression level, when the zlib compressor is used to compress client data. |
Setting any of the *timeoutMS options above to 0
will be interpreted as “use the default value”.
Authentication Options¶
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_AUTHMECHANISM | authmechanism | Specifies the mechanism to use when authenticating as the provided user. See Authentication for supported values. |
| MONGOC_URI_AUTHMECHANISMPROPERTIES | authmechanismproperties | Certain authentication mechanisms have additional options that can be configured. These options should be provided as comma separated option_key:option_value pair and provided as authMechanismProperties. |
| MONGOC_URI_AUTHSOURCE | authsource | The authSource defines the database that should be used to authenticate to. It is unnecessary to provide this option the database name is the same as the database used in the URI. |
Mechanism Properties¶
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_CANONICALIZEHOSTNAME | canonicalizehostname | Use the canonical hostname of the service, rather than its configured alias, when authenticating with Cyrus-SASL Kerberos. |
| MONGOC_URI_GSSAPISERVICENAME | gssapiservicename | Use alternative service name. The default is mongodb . |
SSL Options¶
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_SSLCLIENTCERTIFICATEKEYFILE | sslclientcertificatekeyfile | Path to PEM formatted Private Key, with its Public Certificate concatenated at the end. |
| MONGOC_URI_SSLCLIENTCERTIFICATEKEYPASSWORD | sslclientcertificatekeypassword | The password, if any, to use to unlock encrypted Private Key. |
| MONGOC_URI_SSLCERTIFICATEAUTHORITYFILE | sslcertificateauthorityfile | One, or a bundle of, Certificate Authorities whom should be considered to be trusted. |
| MONGOC_URI_SSLALLOWINVALIDCERTIFICATES | sslallowinvalidcertificates | Accept and ignore certificate verification errors (e.g. untrusted issuer, expired, etc etc) |
| MONGOC_URI_SSLALLOWINVALIDHOSTNAMES | sslallowinvalidhostnames | Ignore hostname verification of the certificate (e.g. Man In The Middle, using valid certificate, but issued for another hostname) |
See mongoc_ssl_opt_t for details about these options and about building libmongoc with SSL support.
Server Discovery, Monitoring, and Selection Options¶
Clients in a mongoc_client_pool_t share a topology scanner that runs on a background thread. The thread wakes every heartbeatFrequencyMS
(default 10 seconds) to scan all MongoDB servers in parallel. Whenever an application operation requires a server that is not known–for example, if there is no known primary and your application attempts an insert–the thread rescans all servers every half-second. In this situation the pooled client waits up to serverSelectionTimeoutMS
(default 30 seconds) for the thread to find a server suitable for the operation, then returns an error with domain MONGOC_ERROR_SERVER_SELECTION
.
Technically, the total time an operation may wait while a pooled client scans the topology is controlled both by serverSelectionTimeoutMS
and connectTimeoutMS
. The longest wait occurs if the last scan begins just at the end of the selection timeout, and a slow or down server requires the full connection timeout before the client gives up.
A non-pooled client is single-threaded. Every heartbeatFrequencyMS
, it blocks the next application operation while it does a parallel scan. This scan takes as long as needed to check the slowest server: roughly connectTimeoutMS
. Therefore the default heartbeatFrequencyMS
for single-threaded clients is greater than for pooled clients: 60 seconds.
By default, single-threaded (non-pooled) clients scan only once when an operation requires a server that is not known. If you attempt an insert and there is no known primary, the client checks all servers once trying to find it, then succeeds or returns an error with domain MONGOC_ERROR_SERVER_SELECTION
. But if you set serverSelectionTryOnce
to “false”, the single-threaded client loops, checking all servers every half-second, until serverSelectionTimeoutMS
.
The total time an operation may wait for a single-threaded client to scan the topology is determined by connectTimeoutMS
in the try-once case, or serverSelectionTimeoutMS
and connectTimeoutMS
if serverSelectionTryOnce
is set “false”.
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_HEARTBEATFREQUENCYMS | heartbeatfrequencyms | The interval between server monitoring checks. Defaults to 10,000ms (10 seconds) in pooled (multi-threaded) mode, 60,000ms (60 seconds) in non-pooled mode (single-threaded). |
| MONGOC_URI_SERVERSELECTIONTIMEOUTMS | serverselectiontimeoutms | A timeout in milliseconds to block for server selection before throwing an exception. The default is 30,0000ms (30 seconds). |
| MONGOC_URI_SERVERSELECTIONTRYONCE | serverselectiontryonce | If “true”, the driver scans the topology exactly once after server selection fails, then either selects a server or returns an error. If it is false, then the driver repeatedly searches for a suitable server for up to serverSelectionTimeoutMS milliseconds (pausing a half second between attempts). The default for serverSelectionTryOnce is “false” for pooled clients, otherwise “true”. Pooled clients ignore serverSelectionTryOnce; they signal the thread to rescan the topology every half-second until serverSelectionTimeoutMS expires. |
| MONGOC_URI_SOCKETCHECKINTERVALMS | socketcheckintervalms | Only applies to single threaded clients. If a socket has not been used within this time, its connection is checked with a quick “isMaster” call before it is used again. Defaults to 5,000ms (5 seconds). |
Setting any of the *TimeoutMS options above to 0
will be interpreted as “use the default value”.
Connection Pool Options¶
These options govern the behavior of a mongoc_client_pool_t. They are ignored by a non-pooled mongoc_client_t.
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_MAXPOOLSIZE | maxpoolsize | The maximum number of clients created by a mongoc_client_pool_t total (both in the pool and checked out). The default value is 100. Once it is reached, mongoc_client_pool_pop() blocks until another thread pushes a client. |
| MONGOC_URI_MINPOOLSIZE | minpoolsize | Deprecated. This option’s behavior does not match its name, and its actual behavior will likely hurt performance. |
| MONGOC_URI_MAXIDLETIMEMS | maxidletimems | Not implemented. |
| MONGOC_URI_WAITQUEUEMULTIPLE | waitqueuemultiple | Not implemented. |
| MONGOC_URI_WAITQUEUETIMEOUTMS | waitqueuetimeoutms | Not implemented. |
Write Concern Options¶
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_W | w | Determines the write concern (guarantee). Valid values:
|
| MONGOC_URI_WTIMEOUTMS | wtimeoutms | The time in milliseconds to wait for replication to succeed, as specified in the w option, before timing out. When wtimeoutMS is 0, write operations will never time out. |
| MONGOC_URI_JOURNAL | journal | Controls whether write operations will wait until the mongod acknowledges the write operations and commits the data to the on disk journal.
|
Read Concern Options¶
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_READCONCERNLEVEL | readconcernlevel | The level of isolation for read operations. If the level is left unspecified, the server default will be used. See readConcern in the MongoDB Manual for details. |
Read Preference Options¶
When connected to a replica set, the driver chooses which member to query using the read preference:
- Choose members whose type matches “readPreference”.
- From these, if there are any tags sets configured, choose members matching the first tag set. If there are none, fall back to the next tag set and so on, until some members are chosen or the tag sets are exhausted.
- From the chosen servers, distribute queries randomly among the server with the fastest round-trip times. These include the server with the fastest time and any whose round-trip time is no more than “localThresholdMS” slower.
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_READPREFERENCE | readpreference | Specifies the replica set read preference for this connection. This setting overrides any slaveOk value. The read preference values are the following:
|
| MONGOC_URI_READPREFERENCETAGS | readpreferencetags | A representation of a tag set. See also Tag Sets. |
| MONGOC_URI_LOCALTHRESHOLDMS | localthresholdms | How far to distribute queries, beyond the server with the fastest round-trip time. By default, only servers within 15ms of the fastest round-trip time receive queries. |
| MONGOC_URI_MAXSTALENESSSECONDS | maxstalenessseconds | The maximum replication lag, in wall clock time, that a secondary can suffer and still be eligible. The smallest allowed value for maxStalenessSeconds is 90 seconds. |
Note
When connecting to more than one mongos, libmongoc’s localThresholdMS applies only to the selection of mongos servers. The threshold for selecting among replica set members in shards is controlled by the mongos’s localThreshold command line option.
Legacy Options¶
For historical reasons, the following options are available. They should however not be used.
| Constant | Key | Description |
|---|---|---|
| MONGOC_URI_SAFE | safe | {true|false} Same as w={1|0} |
| MONGOC_URI_SLAVEOK | slaveok | When set, same as readPreference=secondaryPreferred |
Functions¶
- mongoc_uri_copy()
- mongoc_uri_destroy()
- mongoc_uri_get_auth_mechanism()
- mongoc_uri_get_auth_source()
- mongoc_uri_get_compressors()
- mongoc_uri_get_database()
- mongoc_uri_get_hosts()
- mongoc_uri_get_mechanism_properties()
- mongoc_uri_get_option_as_bool()
- mongoc_uri_get_option_as_int32()
- mongoc_uri_get_option_as_utf8()
- mongoc_uri_get_options()
- mongoc_uri_get_password()
- mongoc_uri_get_read_concern()
- mongoc_uri_get_read_prefs()
- mongoc_uri_get_read_prefs_t()
- mongoc_uri_get_replica_set()
- mongoc_uri_get_service()
- mongoc_uri_get_ssl()
- mongoc_uri_get_string()
- mongoc_uri_get_username()
- mongoc_uri_get_write_concern()
- mongoc_uri_new()
- mongoc_uri_new_for_host_port()
- mongoc_uri_new_with_error()
- mongoc_uri_option_is_bool()
- mongoc_uri_option_is_int32()
- mongoc_uri_option_is_utf8()
- mongoc_uri_set_auth_mechanism()
- mongoc_uri_set_auth_source()
- mongoc_uri_set_compressors()
- mongoc_uri_set_database()
- mongoc_uri_set_mechanism_properties()
- mongoc_uri_set_option_as_bool()
- mongoc_uri_set_option_as_int32()
- mongoc_uri_set_option_as_utf8()
- mongoc_uri_set_password()
- mongoc_uri_set_read_concern()
- mongoc_uri_set_read_prefs_t()
- mongoc_uri_set_username()
- mongoc_uri_set_write_concern()
- mongoc_uri_unescape()


Dr. Choudhury is an associate professor of Information Science at Cornell University. She directs the People Aware Computing group, which develops mobile sensing systems for understanding life patterns of individuals, groups, and societies. She is also a co-founder of HealthRhythms that aims to bring novel technological solutions to facilitate mental wellbeing. More about Dr. Choudhury.
Dr. Honavar is a professor and Edward Frymoyer Chair of Information Science and Technology at Pennsylvania State University. He is also the founding Director of the Center for Big Data Analytics and Discovery Informatics and Associate Director of the Institute for Cyberscience. More about Dr. Honavar.
Dr. Kotz is the Champion International Professor in the Department of Computer Science at Dartmouth College. His research interests include security and privacy, pervasive computing for healthcare, and wireless networks. Find out more about Dr. Kotz.
Mr. Bot is a Principal Scientist at Sage Bionetworks in Seattle, Washington. His current work involves both doing innovative research in computational oncology as well as serving as a bridge between biomedical researchers and technology development. Find out more about Mr. Bot.
Dr. Anderson is director of informatics research and Robert D. Cardiff Professor of Informatics at the University of California, Davis. Dr. Anderson's research is into the effective uses of biomedical data, information and knowledge for scientific inquiry, problem solving and decision making. More about Dr. Anderson.
Dr. Corkery, who has an MD degree, is Product Management Lead for the healthcare and life sciences market for Google Cloud. Prior to Google, he worked in the area of computational drug discovery. More about Dr. Corkery.
Dr. Ball is Director of Research at the Open Humans Foundation and co-founder of Open Humans. Her research aims to help connect people and their data to research studies. At Open Humans, she is the principal investigator on the non-profit's Public Data Sharing study. Find out more about Dr. Ball.
Mr. Wolf is co-fonder of The Quantified Self, a global collaboration among users and makers of self-tracking tools exploring “self-knowledge through numbers.” Wolf is also a contributing editor at Wired magazine and the author of three books. More about Mr. Wolf.


--- title: "Spring Bling! 460,000 Blooming Bulbs" date: "2018-03-25 00:00:01 -06:00" categories: - garden-journal layout: "post" blog-banner: "garden-journal-spring.jpg" post-date: "March 25, 2018" post-time: "03:00 PM" blog-image: "2018-03-25-wh.jpg" published: true ---
By: Kate Randall, Red Butte Garden Marketing Communications Specialist
Just a drop in the bucket of the daffodils you'll see in on a walk through the Garden.
This spring visit Red Butte Garden to see the growing display of 460,000 blooming bulbs! In the fall of 2017, staff and volunteers planted 32,600 more bulbs, including many in the Adaptive Beauty terrace of the new Water Conservation Garden.
The bulbs usually begin to bloom in March with ground-covering mini-Iris in various shades of blues, purples, and yellows. Then in April, fresh, show-stopping daffodils herald the arrival of spring. Visit the Garden April 14 through April 28 for the best blooms. The Garden has over 239,018 daffodils and 228,413 other bulbs such as Allium, Anemone, Cyclamen, Galanthus, Hyacinth, and more. Flowering bulbs are not the only showy spring display- trees and shrubs also begin to blossom throughout the Garden - serviceberry, crabapple, magnolia, flowering cherry, pears, and lilacs.
Since 2013, Red Butte Garden has been recognized as an official Daffodil Display Garden by the American Daffodil Society. Our display represents all 13 recognized daffodil divisions, which are based on floral parts and species derivation. Divisions include: Trumpet, Large-Cupped, Small-Cupped, Double, Triandrus, Cyclamineus, Jonquilla, Tazetta, Poeticus, Bulbocodium, Split-Cupped, Miniatures, Miscellaneous Species and Wild Forms. Our display also includes many recipients of the Wister Awards, which recognizes outstanding American hybridizers and daffodil selections
Read more about our Daffodil Display
See our Plant Collections page


Provides flexible control to particles' magnification and transparency. Parameters for magnification starts with "Mag", those for transparency starts with "Alp" (stands for alpha).
Sliders
StZoom
Initial magnification when a particle is first emitted.
Overrides ParticleRender@particle_ri_ver3 setting
Affects FineAdjustment@particle_ri_ver3
EdZoom
Final magnification when a particle reaches its survival time.
Overrides ParticleRender@particle_ri_ver3 setting
Affects FineAdjustment@particle_ri_ver3
StAlpha
Initial transparency when a particle is first emitted.
Overrides ParticleRender@particle_ri_ver3 setting
Affects FineAdjustment@particle_ri_ver3
EdAlpha
Final transparency when a particle reaches survival time.
Overrides ParticleRender@particle_ri_ver3 setting
Affects FineAdjustment@particle_ri_ver3
Check box
RelativeTime
Checked: Time zero is when a particle is emitted.
Unchecked: Time zero is the object's starting point.
Setting dialog
(In the following, ___ can be replaced by either Mag or Alp)
>2: Repetitive change with this value number of times. For odd number, final value is the changed one. For even value, the final value is the initial one before changing.


SSLab
SSLab represents the Systems Software & Security Lab from Georgia Institute of Technology led by Prof. Taesoo Kim.
We have been actively working on SGX related research. These research projects can be broadly classified into three different categories: System Design, Defense, and Attack.
- Please take a look at our achievements on Attacks and Defenses for Intel SGX. Demo videos can be viewed under SGX Bootstrap/CCS17 Tutorial.
SGX Bootstrap
This is the very place to learn building your first application with Intel SGX in mind.
Resources
Here you can look up various resouces related to Intel SGX for reference.


Classes
The following classes are available globally.
-
Manages a screen of your app, it keeps the UI updated and listens for user interactions.
Overview
In Tempura, a Screen is composed by three different elements that interoperate in order to get the actual pixels on the screen and to keep them updated when the state changes. These are ViewController,
ViewModelWithState
andViewControllerModellableView
. The ViewController is a subclass ofUIViewController
that is responsible to manage the set of views that are shown in each screen of your UI.struct CounterState: State { var counter: Int = 0 }
struct IncrementCounter: Action { func updatedState(inout currentState: CounterState) { currentState.counter += 1 } }
struct DecrementCounter: Action { func updatedState(inout currentState: CounterState) { currentState.counter -= 1 } }
struct CounterViewModel: ViewModelWithState { var countDescription: String init(state: CounterState) { self.countDescription = "the counter is at \(state.counter)" } }
class CounterView: UIView, ViewControllerModellableView { // subviews var counterLabel = UILabel() var addButton = UIButton(type: .custom) var subButton = UIButton(type: .custom) // interactions var didTapAdd: Interaction? var didTapSub: Interaction? // setup func setup() { self.addButton.on(.touchUpInside) { [unowned self] button in self.didTapAdd?() } self.subButton.on(.touchUpInside) { [unowned self] button in self.didTapSub?() } self.addSubview(self.counterLabel) self.addSubview(self.subButton) self.addSubview(self.addButton) } // style func style() { self.backgroundColor = .white self.addButton.setTitle("Add", for: .normal) self.subButton.setTitle("Sub", for: .normal) } // update func update(oldModel: CounterViewModel?) { self.counterLabel.text = self.model?.countDescription self.setNeedsLayout() } // layout override func layoutSubviews() { self.counterLabel.sizeToFit() self.addButton.frame = CGRect(x: 0, y: 100, width: 100, height: 44) self.subButton.frame = CGRect(x: 100, y: 100, width: 100, height: 44) } }
class CounterViewController: ViewController<CounterView> { override func setupInteraction() { self.rootView.didTapAdd = { [unowned self] in self.dispatch(IncrementCounter()) } self.rootView.didTapSub = { [unowned self] in self.dispatch(DecrementCounter()) } }
Lifecycle of a ViewController
In order to instantiate a ViewController’s subclass you need to provide a Katana
Store
instance. This instance will be used by the ViewController to listen for state updates.let vc = CounterViewController(store: appStore)
When a ViewController is created it will start receiving state updates as soon as the
connected
property will becometrue
.When the ViewController becomes visible, the UIKit
UIViewController.viewWillAppear()
will be called and Tempura will setconnected
totrue
and the ViewController will start receiving the updates from the state. If you don’t want this to happen automatically every time the ViewController will become visible, setshouldConnectWhenVisible
tofalse
.As soon a new state is available from the Katana store, the ViewController will instantiate a new ViewModel out of that state and feed the
rootView
with that, callingModellableView.update(oldModel:)
When something happens inside the
ViewControllerModellableView
(or its subviews) the ViewController is responsible to listen for theseInteraction
callbacks and react accordingly dispatching actions in order to change the state.When a ViewController is removed from the hierarchy or hidden by some other ViewController, UIKit will call
See moreUIViewController.viewWillDisappear()
and Tempura will setconnected
tofalse
, detaching the ViewController from the state updates. If you don’t want this to happen automatically every time the ViewControllet will become invisible, setsholdDisconnectWhenInvisible
tofalse
Declaration
Swift
open class ViewController<V> : UIViewController, AnyViewController where V : UIView, V : ViewControllerModellableView
-
A View used to do ViewController containment This is the View that will contain the View of the managed ViewController
See moreDeclaration
Swift
public class ContainerView : UIView
-
Special case of a
ViewController
that contains aLocalState
.Overview
A
ViewController
is managing the UI of a screen, listening for Katana global state changes, keeping the UI updated and dispatching actions in response to user interactions in order to change the global state.There are times when you have some kind of state information that is only specific to the screen managed by a ViewController, like for instance the item selected in a list. In this case, in order to avoid polluting the global state, you can represent that information inside a
LocalState
and promote that ViewController to be aViewControllerWithLocalState
.A ViewControllerWithLocalState contains a
localState
variable that you can change directly in order to represent local state changes. The ViewControllerWithLocalState will be listening for changes of both global and local states, updating the UI using the appropriateViewModelWithLocalState
.You can change the global state dispatching Katana actions like in every
ViewController
. You can change theLocalState
manipulating directly thelocalState
variable.The lifecycle of a ViewControllerWithLocalState is the same as a normal
ViewController
, please refer to that for more details.struct GlobalState: State { var todos: [String] = [ "buy milk", "find a unicorn", "visit Rome" ] }
struct RemoveTodo: AppAction { var index: Int func updatedState(inout currentState: GlobalState) { currentState.todos.remove(at: index) } }
struct ListLocalState: LocalState { var selectedIndex: Int }
struct TodolistViewModel: ViewModelWithLocalState { var todos: [String] var selectedIndex: Int init?(state: GlobalState?, localState: ListLocalState) { guard let state = state else { return nil } self.todos = state.todos self.selectedIndex = localState.selectedIndex } }
class TodoListView: UIView, ViewControllerModellableView { // subviews var todoListView = ListView() // interactions var didTapToRemoveItem: ((Int) -> ())? var didSelectItem: ((Int) -> ())? // setup func setup() { self.todoListView.on(.selection) { [unowned self] indexPath in self.didSelectItem?(indexPath.item) } self.todoListView.on(.deleteItem) { [unowned self] indexPath in seld.didTapRemoveItem?(indexPath.item) } self.addSubview(self.todoListView) } // style func style() { self.backgroundColor = .white self.todoListView.backgroundColor = .white } // update func update(oldModel: CounterViewModel?) { self.todoListView.source = model?.todos ?? [] self.todoListView.selectedIndex = model?.todos } // layout override func layoutSubviews() { self.todoListView.frame = self.bounds } }
See moreclass TodoListViewController: ViewControllerWithLocalState<TodoListView> { override func setupInteraction() { self.rootView.didTapRemoveItem = { [unowned self] index in self.dispatch(RemoveTodo(index: index)) } self.rootView.didSelectItem = { [unowned self] index in self.localState.selectedIndex = index } }
Declaration
Swift
open class ViewControllerWithLocalState<V: ViewControllerModellableView & UIView>: ViewController<V> where V.VM: ViewModelWithLocalState
-
Wraps an array of NavigationRequest into a reference-type object
See moreDeclaration
Swift
public class NavigationRequests : Equatable, ExpressibleByArrayLiteral, CustomDebugStringConvertible
-
Main class that is handling the navigation in a Tempura app.
Overview
When it comes to creating a complex app, the way you handle the navigation between different screens is an important factor on the final result.
We believe that relying on the native iOS navigation system, even in a Redux-like environment like Katana, is the right choice for our stack, because:
there is no navigation code to write and maintain just to mimic the way native navigation works
native navigation gestures will come for free and will stay up to date with new iOS releases
the app will feel more “native”
For these reasons we found a way to reconcile the redux-like world of Katana with the imperative world of the iOS navigation.
The Routable protocol
If a Screen (read ViewController) takes an active part on the navigation (i.e. needs to present another screen) it must conform to the
RoutableWithConfiguration
protocol.protocol RoutableWithConfiguration: Routable { var routeIdentifier: RouteElementIdentifier { get } var navigationConfiguration: [NavigationRequest: NavigationInstruction] { get } }
typealias RouteElementIdentifier = String
Each
RoutableWithConfiguration
can be asked by the Navigator navigation to perform a specific navigation task (like present another ViewController) based on the navigation action (Show
,Hide
) you dispatch.The route
A
Route
is an array that represents a navigation path to a specific screen.typealias Route = [RouteElementIdentifier]
How the navigation works
Suppose we have a current
Route
like “screenA”, “screenB” the topmost ViewController/RoutableWithConfiguration in the visible hierarchy.Tempura will expose two main navigation actions:
Show
Show("screenC", animated: true)
When this action is dispatched, the
Navigator
will ask “screenB” (the topmostRoutableWithConfiguration
to handle that action, looking at itsnavigationConfiguration
).In order to allow “screenB” to present “screenC”, we need to add a
NavigationRequest
inside thenavigationConfiguration
of “screenB” that will match theShow("screenC")
action with a.show("screenC")
NavigationRequest
.extension ScreenB: RoutableWithConfiguration { // needed by the `Routable` protocol // to identify this ViewController in the hierarchy var routeIdentifier: RouteElementIdentifier { return "screenB" } // the `NavigationRequest`s that this ViewController is handling // with the `NavigationInstruction` to execute var navigationConfiguration: [NavigationRequest: NavigationInstruction] { return [ .show("screenC"): .presentModally({ [unowned self] _ in let vc = ScreenC(store: self.store) return vc }) ] }
Inside the
.presentModally
NavigationInstruction, we create and return the ViewController that is implementing the “screenC”. This will be used by theNavigator
to call the appropriate UIKit navigation action ( aUIViewController.present(:animated:completion:)
in this case).If the Navigator will not find a matching NavigationRequest in the navigationConfiguration of “screenB”, it will ask to the next RoutableWithConfiguration in the visible hierarchy, in this case “screenA”. If nobody is matching that NavigationRequest, a fatalError is thrown.
Hide
Same will happen when a
Hide
function is dispatched.Hide("screenC", animated: true)
Looking at the current
Route
[“screenA”, “screenB”, “screenC”], the Navigator will ask the topmost RoutableWithConfiguration (“screenC” in this case) to match for a.hide("screenC")
NavigationRequest
.Again, if we want “screenC” to be responsible for dismissing itself, we just need to implement the matching
NavigationRequest
in thenavigationConfiguration
:extension ScreenC: RoutableWithConfiguration { // needed by the `Routable` protocol // to identify this ViewController in the hierarchy var routeIdentifier: RouteElementIdentifier { return "screenC" } // the `NavigationRequest`s that this ViewController is handling // with the `NavigationInstruction` to execute var navigationConfiguration: [NavigationRequest: NavigationInstruction] { return [ .hide("screenC"): .dismissModally(behaviour: .hard) ] }
If the Navigator will not find a matching NavigationRequest in the navigationConfiguration of “screenC”, it will ask to the next RoutableWithConfiguration in the visible hierarchy, in this case “screenB”. If nobody is matching that NavigationRequest, a fatalError is thrown.
Initializing the navigation
In order to use the navigation system you need to start the Navigator (typically in your AppDelegate) using the
start(using:in:at:)
method. In this method you need to specify aRootInstaller
and a starting screen. The RootInstaller (typically your AppDelegate) will be responsible to handle the installation of the screen you specified before.Doing so, the Navigator will call the
RooInstaller.installRoot(identifier:context:completion:)
method that will handle the setup of the screen to be shown.
See moreclass AppDelegate: UIResponder, UIApplicationDelegate, RootInstaller { func application(_ application: UIApplication, didFinishLaunchingWithOptions ...) -> Bool { ... // setup the root of the navigation // this is done by invoking this method (and not in the init of the navigator) // because the navigator is instantiated by the Store. // this in turn will invoke the `installRootMethod` of the rootInstaller (self) navigator.start(using: self, in: self.window, at: "screenA") return true } // install the root of the app // this method is called by the navigator when needed // you must call the `completion` callback when the navigation has been completed func installRoot(identifier: RouteElementIdentifier, context: Any?, completion: () -> ()) -> Bool { let vc = ScreenAViewController(store: self.store) self.window.rootViewController = vc completion() return true } }
Declaration
Swift
public class Navigator


Hitler's Daughter (1990)
A review by Scott Hamilton and Chris Holland.
For the html version of this review with screen captures, please point your browser to http://members.aol.com/stomptokyo
Our rating: one lava lamp (out of five).
Hitler's Daughter is a surprisingly violent TV movie that aired in 1990. We saw this in the local TV listing recently and just had to see it. What you need to understand is that six months ago we happened to buy a bad little pot-boiler by the same name at a used book sale. The cover declares "Hitler's Daughter... Wants to occupy the White House." How could we resist? And lo and behold, the movie, which was on at 2 in the morning, sandwiched between an endless variety of sex talk line commercials, is in fact based on the book! We were in cannabalistic pop culture heaven!
We are introduced to the main character, Ted Scott (Patrick Cassidy), and he spends the rest of the movie wondering why he doesn't have a last name. Just kidding. Ted is a White House press aide working for a lame duck president during election season. The incumbent Vice President, Elliot Benedict, is running for his boss' job. Virgil Rutledge is running for the other party.
One day, Ted gets a call from an old professor of his named Bauman (Donald Davis). The professor wants to meet with Ted because he has some very important information to give him, but Ted blows him off. This is why Ted is surprised when the Bauman somehow gets into the secured parking garage at Ted's place of business just as Ted is leaving work. Bauman has a package he wants to give Ted, but before he can, both Ted and Bauman are attacked by men posing as security guards. Bauman is killed, Ted is knocked out, and one of the guards shoots himself in the shoulder so Ted will be framed as a killer. Then, taking a cue from every James Bond villain ever, they leave Ted in a car rigged to explode along with Bauman's bullet-ridden file, and they don't check back to make sure Ted is actually dead or the file destroyed when the car explodes.
The car doesn't explode the way it should (the conspiracy has a lot of trouble with that) and Ted is soon on the run with the file. It's the oldest of suspense plots: the good guy has a file (or more recently, computer disk) and the bad guys will do anything to get it back. All of these plots take place in an alternate dimension, where copy machines do not exist and the bad guys believe the good guys when they say they haven't made a copy of the file... because it's actually true! Whether it's the 39 Steps or The X-Files, we can hardly go to the movie theaters or turn on the TV without seeing some poor schmuck (or beautiful woman) running from faceless minions trying to get that darn file back.
Now what should raise this silly plot above all of the other versions of this story we've seen is the tabloid nature of the file: That Hitler's daugter is alive... And she wants to occupy the White House! All right, now we're talking! That Hitler even had a daughter is only a remote historical possibility, but it's fun to think about, in a Hard Copy/Jerry Springer kind of way.
Which brings us to the central question... Who is Hitler's daughter? Well, we don't know. The movie is structured in such a way that we have three suspects, and we don't know which one is the titular character. All three characters (a reporter, the VPs wife, and a Senator) seem to be power hungry, and all three seem to be willing to claw (or sleep) their way to the top, but because we aren't supposed to know who is really Hitler's daughter until the end of the movie, none of the women ever actually do anything particularly evil! It's not so much "Hitler's daughter wants to occupy the White House" as "Hitler's daughter wants to be on Melrose Place."
So, what are we left with? Not a whole lot. The story doesn't unfold very smoothly, and there is nothing in this plot that we haven't seen before in any number of other conspiracy movies. Besides, why would Hitler's daughter go into politics? These days, the easiest way to spread evil throughout the world is to write bad TV movies.
This review copyright 1998 by Chris Holland and Scott Hamilton of Stomp Tokyo Video Reviews. http://members.aol.com/stomptokyo
-- Stomp Tokyo Video Reviews Illuminating the dark heart of video every week. http://members.aol.com/stomptokyo/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Bioinformatics research performed using Python, R, C++, and Bash.
Experienced with Python, R, C++, and Bash. Familiar with C, C#, Javascript, HTML, CSS, Assembly, GML, and Julia.
Research performed and data analyzed using Numpy, SciPy, ggplot2, and more.
Master's degree in Bioinformatics from Brigham Young University. Bachelor's degree in Biotechnology from Brigham Young University - Idaho.
Computational scientific researcher at Brigham Young University, Course developer at BYU-I, Web Developer at Lynx Digital Design.
Awarded a fellowship for research on breast cancer - Presented research at an ISCB conference.


FOOD
Tipperary tortilla company shortlisted for major national food award
FIFTEEN MILLION OF CLONMEL-MADE TORTILLAS SOLD TO DATE
Tipperary-based Philip Martin, CEO of Blanco Nino has been announced as one of four shortlisted professionals for Bord Bia’s Food and Drink Awards 2019 in the Future Leader Category.
Designed to recognise excellence within Ireland’s largest indigenous industry, more than 300 leading industry professionals will gather at the event hosted by RTÉ’s Miriam O’Callaghan on Wednesday, November 27 in the RDS Concert Hall.
Philip Martin is CEO of premium Mexican food brand Blanco Niño. At the age of just 31, this is Philip’s second successful business, having set up Little Ass Burrito a restaurant in Dublin previously.
The Future Leader award aims to recognise individuals who have made a significant positive impact to the business environment in which they work and have demonstrated consistent leadership and commitment to the food and drink industry.
Unsatisfied with the quality of corn tortillas on the market, Philip travelled to Mexico to learn how to make authentic versions in the ancient Aztec way.
Back in Ireland, he identified that he would need to set up a tortilla factory, and in 2016 began producing premium Mexican-style corn tortillas for the Blanco Niño brand in Clonmel.
More than 15 million of its tortillas have been sold to date, including to major UK players such as Wahaca, The Restaurant Group, Casual Dining Group and Peach Pubs. Philip, as CEO, has since established relationships and routes to market across 14 European countries via 25 distribution partners


Harden leads Rockets to seventh straight win
Houston defeated Minnesota 125-105 in the NBA on Saturday night.
James Harden scored a superb 49 points from 41 shots from open play as the Houston Rockets won their seventh straight game in the NBA on Saturday, winning away at the Minnesota Timberwolves by 125-105.
Harden stood up in the absence of the resting Russell Westbrook to carve apart the Timberwolves, his 41 attempts coming in as the most in the league so far this season.
Harden scored from 16 of those attempts, making eight from 22 from three-point range, while Karl-Anthony Towns had 27 points for Minnesota.
Meanwhile CJ McCollum scored 32 points as the Portland Trail Blazers edged out the San Antonio Spurs on the road, 121-116.
Damian Lillard scored 22 points for Portland while LaMarcus Aldridge had 30 for the Spurs, whose coach Gregg Popovich was ejected after walking onto the court to berate a referee.
In Los Angeles, Paul George scored 37 points as the Clippers crushed the Atlanta Hawks 150-101.
With Kawhi Leonard sitting out with a knee strain for LA, George was on song on his Clippers home debut, with help from Lou Williams’s 25 points.
In Indianapolis, Giannis Antetokounmpo scored 26 points and had 13 rebounds to help the Milkwaukee Bucks defeat the Indiana Pacers 102-83.
Brook Lopez added 15 points and eight rebounds for the Bucks, who took their win-loss record to 9-3.
Elsewhere, the Brooklyn Nets won 117-111 at the Chicago Bulls, the Charlotte Hornets won 103-102 in a thriller at the New York Knicks, the Miami Heat beat the visiting New Orleans Pelicans 109-94 and the Dallas Mavericks won 110-102 at home to the Toronto Raptors.


ELECTRON-MP3
<< Previous
PLAY
PAUSE
Next >>
MP3s
Delete Selected
Add a Song
Volume Slider:
Volume:
100


Before Change
import numpy as np
seed_mask = (labels == 2)
seeds = utils.seeds_from_mask(seed_mask, density=[2, 2, 2], affine=np.eye(4))
Finally, we can bring it all together using ``LocalTracking``, performing Using
the EuDX algorithm [Garyfallidis12]_. ``EuDX`` [Garyfallidis12]_ is a fast
algorithm that we use here to generate streamlines. This algorithm is what is
used here and the default option when providing the output of peaks directly
in LocalTracking.
from dipy.tracking.local import LocalTracking
from dipy.tracking.streamline import Streamlines
// Initialization of LocalTracking. The computation happens in the next step.
streamlines_generator = LocalTracking(csa_peaks, classifier, seeds,
affine=np.eye(4), step_size=.5)
// Generate streamlines object
streamlines = Streamlines(streamlines_generator)
We will then display the resulting streamlines using the ``fury``
python package.
from dipy.viz import colormap
if has_fury:
// Prepare the display objects.
color = colormap.line_colors(streamlines)
streamlines_actor = actor.line(streamlines,
colormap.line_colors(streamlines))
// Create the 3D display.
r = window.Renderer()
r.add(streamlines_actor)
// Save still images for this static example. Or for interactivity use
window.record(r, out_path="tractogram_EuDX.png", size=(800, 800))
if interactive:
window.show(r)
.. figure:: tractogram_EuDX.png
:align: center
**Corpus Callosum using EuDx**
We"ve created a deterministic set of streamlines using the EuDX algorithm. This
is so called deterministic because if you repeat the fiber tracking (keeping
all the inputs the same) you will get exactly the same set of streamlines.
We can save the streamlines as a Trackvis file so it can be loaded into other
software for visualization or further analysis.
from dipy.io.streamline import save_trk
save_trk("tractogram_EuDX.trk", streamlines, affine, shape=labels.shape,
vox_size=labels_img.header.get_zooms())
References
----------
After Change
from dipy.io.stateful_tractogram import Space, StatefulTractogram
from dipy.io.streamline import save_trk
sft = StatefulTractogram(streamlines, hardi_img, Space.RASMM)
save_trk(sft, "tractogram_EuDX.trk", streamlines)
References


{% load static %}
{% include "dashboard/shared_links.html" %}
About
{% include "dashboard/navigation_bar.html" %}
CINS 465: Final Project by Devam Sharma,Sujeet Hiramath and Chetan Kurra
Food Pantry Project
We created a new Django project and the required apps for it, i.e dashboard, waste_management, provider, inventory and impact_measurement. We started with the login and register page. After that the dashboard.html and Navigation_Bar.html to include the navigation bar, and also shared_links.html to include the various link of bootstrap.
After Making a commmon CSS file for the project and one more CSS for the nav bar, Its easiler to impletmet the CSS in whole project, It also gives the uniformity to pages and the website looks very aesthetic. After completing the dashboard app, we worked the provider app, created tables and implemeted the edit and delete for provider as required for the project.
After completing the provider app, we worked on the inventory, so that once a provider is added, we can add items in the inventory by choosing the provider at first. The same delete and edit functions are used in inventory too.
Third app, we worked on is the Check out. As items in inventory needs to be checked out by a student, it will transfer the item name and the quantity add in cart will be subtracted from the inventory.
With all the functions working, We worked on the app like impact_measurement and waste_management. There apps are for the statistics of the whole food pantry. In the impact_measurement, statistics like average number of items is displayed by chartist.js and the whole table of students and their number of items checked out is displayed.
In the waste_management, We made two tables, one of which shows the items which are going to expire in two days and the another one show the expired items, that needs to be dumped in the garbage.
Dashboard shows the overall statistics of pantry. It consists of 4 graphs. First graph shows Number of items checked out by students from pantry in last 10 days, second graph is for waste reduction statistics. 3rd line chart shows the top 10 most donated items. And the final pie chart shows the provider statistics
About Us
Devam Sharma: I'm a Grad student here at chico state majoring in computer science. I did my bachlors also in computer science from JECRC University, Jaipur. I've also done a frontend internship in my final year of bachlors, which means I also have a knowledge about the typography and color combinations which will make the website look good.
Sujeet Hiramath: I am a computer science graduate student studying at California State University Chico. I did my bachelor's in Computer Engineering from the University of Mumbai. I have one year of work experience as an Associate Software Engineer at FIGmd Inc. (Google Venture). I am extremely passionate about programming.
Chetan Sai Kurra: I am Chetan Sai Kurra Grad student in Chico state computer science.
I have pursued my bachelor's in computer science at Amrita Vishwa Vidyapeetham in India. I am interested in software programming and Ai.


Coding Bootcamps are fast-paced and intensive training programs in application programming and development.


This tutorial will teach you how to fetch data from the server. Knowledge of how to access the DOM from JavaScript is assumed. There are five short lessons, followed by one exercise.
It is highly recommended that you open your browser's JavaScript console now. When stuff doesn't work, there's usually an error printed in the console. The console is your friend.
Fetching new data from the server without reloading the page makes web
applications much faster and more responsive. On this server there is a
file called data.txt
.
Let's fetch the contents of this file with JavaScript.
Here is the skeleton for an XMLHttpRequest
[?] call:
var sendAjax = function() { var req = new XMLHttpRequest();Create a new XMLHttpRequest object. req.open('GET', 'data.txt');Configure the XMLHttpRequest object.
Use GET or POST, and set the relative URL. req.onreadystatechange = myResponseHandler;When the response comes back from the server,
call this function. 'this' will be the XMLHttpRequest object. req.send();Actually send the request. }; document.getElementById('execute1').addEventListener('click', sendAjax, false);When the button is clicked,
send the AJAX request.
Mouse over each of the above lines to see what's happening.
Write some JavaScript code below that defines myResponseHandler
as a function that simply alerts this.responseText
.
Then click the 'Execute' button.
The previous lesson resulted in three alerts. That's because the response handler was called at three different stages of the request:
Most response handlers only care about the final state (4). Therefore your
response handler should only alert if the XMLHttpRequest object's
readyState
property is 4
.
Likewise, your response handler should also check that the page loaded correctly
with an HTTP code of 200
. Sometimes the server will fail, return an
HTTP code of 500
, and you don't want your handler attempting to parse
some random Python stack trace instead of data. Therefore your response handler should also
only alert if the XMLHttpRequest object's status
property is 200
.
Write some JavaScript code below that defines myResponseHandler
as a function that alerts this.responseText
only if this.readyState
and this.status
have the correct values.
(In the context of a response handler, this
is the XMLHttpRequest object.)
Then click the 'Execute' button.
As implied by the name, XMLHttpRequest is often used to request XML from the server.
The code in previous lessons can fetch XML, but it would arrive as text, leaving you to
write a parser. A better way is to use the responseXML
property instead of the
responseText
property. Then the contents of the responseXML
property will
contain a fully-parsed DOM tree.
var sendAjax = function() { var req = new XMLHttpRequest(); req.open('GET', 'data.xml'); req.onreadystatechange = myResponseHandler; req.send(); }; document.getElementById('execute3').addEventListener('click', sendAjax, false);
On this server there is a file called data.xml
.
Write some JavaScript code below that defines myResponseHandler
as a function that fetches this data, finds the first cat using
this.responseXML.getElementsByTagName
, and alerts its name.
In addition to text and XML, JSON[?]
is an extremely common data type. Parsing JSON is easy, just get the data as text
and pass it to JSON.parse()
.
var sendAjax = function() { var req = new XMLHttpRequest(); req.open('GET', 'data.json'); req.onreadystatechange = myResponseHandler; req.send(); }; document.getElementById('execute4').addEventListener('click', sendAjax, false);
On this server there is a file called data.json
.
Write some JavaScript code below that defines myResponseHandler
as a function that fetches this data, finds the first
astronaut to walk on the moon, and alerts his name.
Previous lessons have demonstrated how to receive data from the server, but what about sending data to the server? The simplest way to do this is to use the GET method to append data to the URL.
This server hosts a simple calculator. This link demonstrates the addition of two numbers:
/add.py?a=4&b=8
Modify the JavaScript code below so that the numbers in the following two
input fields (with IDs "number1"
and "number2"
respectively)
are added together and the number alerted. The contents of an input field may be obtained
from its value
property.
+
The goal of this exercise is to write a collaborative drawing application where users can turn stars on and off and all other viewers of this page see the same pattern.
/collab.py?n=99&s=1
Work through each step, one by one. When complete, you may wish to open another copy of this page in another window to verify that collaboration is occurring.
|
Here is a table containing 100 stars: |
This is the HTML for the table to the left:

    ...

    ...
 ...
 |
Bonus #1: The 'GET' protocol should not be used to change server state, which is what is happening here. Convert the XMLHttpRequest to use 'POST'. See: Using POST method in XMLHttpRequest.
Bonus #2: Updates only happen when the user clicks a star. Try creating a recurring task with
window.setInterval
[?]
that sends a request to /collab.py
with no arguments to get an update.
Use the Intro to JavaScript forum to share your solution to this exercise and see other people's solutions.


AngularJS - Multiple Timers Example
{{seconds}}
{{minutes}} minutes, {{seconds}} seconds.
Start Timers
Stop Timers


MST Blogger
Twitter
GitHub
Forwarding tech reviews and articles of an experienced develper
Follow me on Facebook
Apple
Hardware and software
To make a contribution to the world by making tools for the mind that advance humankind
... continue reading
Google
Hardware and software
An immersive, three-day experience focused on exploring the next generation of technology, mobile and beyond
... continue reading
Microsoft
Hardware and software
Empower every person and every organization on the planet to achieve more.
... continue reading


#include <DomainControl.hpp>
|
| | DomainControl (const std::vector< std::shared_ptr< Control > > &controls) |
| |
| | DomainControl (const DomainControl &other)=delete |
| |
| virtual | ~DomainControl ()=default |
| |
| void | setup_batch (void) override |
| | Prepare the control for being written through side effects by the owner's write_batch step. This method should not fail if called multiple times, and ideally only apply the side effects on the first call. More...
|
| |
| void | adjust (double value) override |
| | Store values to be written by the owner's write_batch step. More...
|
| |
| void | write (double value) override |
| | Write the value of the control without affecting any pushed batch controls. More...
|
| |
| void | save (void) override |
| | Store the current setting of the control for use by a future call to restore(). More...
|
| |
| void | restore (void) override |
| | Restore the setting stored by save(). More...
|
| |
| virtual | ~Control ()=default |
| |
◆ DomainControl() [1/2]
| geopm::DomainControl::DomainControl |
( |
const std::vector< std::shared_ptr< Control > > & |
controls | ) |
|
◆ DomainControl() [2/2]
| geopm::DomainControl::DomainControl |
( |
const DomainControl & |
other | ) |
|
|
delete |
◆ ~DomainControl()
| virtual geopm::DomainControl::~DomainControl |
( |
| ) |
|
|
virtualdefault |
◆ adjust()
| void geopm::DomainControl::adjust |
( |
double |
value | ) |
|
|
overridevirtual |
Store values to be written by the owner's write_batch step.
Implements geopm::Control.
◆ restore()
| void geopm::DomainControl::restore |
( |
void |
| ) |
|
|
overridevirtual |
◆ save()
| void geopm::DomainControl::save |
( |
void |
| ) |
|
|
overridevirtual |
◆ setup_batch()
| void geopm::DomainControl::setup_batch |
( |
void |
| ) |
|
|
overridevirtual |
Prepare the control for being written through side effects by the owner's write_batch step. This method should not fail if called multiple times, and ideally only apply the side effects on the first call.
Implements geopm::Control.
◆ write()
| void geopm::DomainControl::write |
( |
double |
value | ) |
|
|
overridevirtual |
Write the value of the control without affecting any pushed batch controls.
Implements geopm::Control.
The documentation for this class was generated from the following files:


COVID- anaesthesia women respiratory patients risk general infection caesarean pregnant PPE coronavirus {border-style clinical obstetric px;} section #ffffff;} suspected data care protection confirmed use Accessed COVID-. Available associated precautions severe SARS-CoV- analgesia evidence neuraxial outcomes patient transmission viral at: emergency equipment healthcare management minimise platelet pregnancy recommendations surgical April Obstet acute cases different disease epidural following intubation labour px; series standard sterile tracheal {font-family anaesthetic conversion delivery eye font-size health number pneumonia recommended staff theatre used virus AGPs FFP Infect Table available case double; emerging fetal include increased novel outbreak required spinal support Coronavirus Elsevier However, March anaesthesia. analysis appropriate assessment based border-color border-width caused disease. fever gloves, human impact including information maternal need operating particles presenting reduce services solid; syndrome {font-style {font-weight COVID-, Caesarean Fluid-resistant Health Neuraxial Personal References Respiratory admitted airway approach block bold centre characteristics coughing count courier; decrease distress does droplets e.g. elective em; emergence face greater hospital hypotension indicated infected labour, mask masks new online oxygen pandemic possible postnatal practice present protective pt;} research resource spread symptoms. team using woman worn


* The Top 45 Things I Learned from the Movie "Armageddon."
>From Story Bytes ================ Very short stories from 2 to 2048 words with lengths a power of 2. <http://www.storybytes.com>
The Top 45 Things I Learned from the Movie "Armageddon." by M. Stanley Bubien
45.
44. Even though your asteroid is rotating wildly on 3 axes, you always have a perfect view of the Eastern seaboard of the United States.
43. The best way an American can gain the trust of the Chinese is to drench them with crude oil. Thumbs up Yankee!
42. The USA rules.
41. In a disaster movie, it's okay to chop a salesman into two pieces, but never ever let the cute little doggy get a scratch.
40. When parked on an asteroid, low gravity situations never apply to you when you're inside the Space Shuttle.
39. When on the asteroid's surface, low gravity situations never apply to the equipment you brought with you---unless you need to leap over a giant canyon.
38. When crashing a Space Shuttle into a low gravity asteroid, you plow into the ground and break apart without bouncing one single time or losing any equipment into space---even if you are travelling faster than the asteroid's escape velocity.
37. Your thrusters always push you down, even if you are spinning out of control and they're spraying in all different directions.
36. "Laughing With" vs. "Laughing At": When Steve Buscemi delivers a line, that's "Laughing With"; When Bruce Willis delivers a line, that's "Laughing At."
35. Eleven minutes at 8 Gs isn't all that bad. Sure you complain a little, but your loose facial muscles never bend back from the force, your lips don't turn white from blood drainage, and you have no trouble remaining completely conscious the whole time. You are, after all, one of the best damn oil rig workers in the South China Sea!
34 (tie). Fire will burn in a vacuum.
34 (tie). Sound will travel in a vacuum.
33. Not only can a Space Shuttle dock while flying loops around a rotating space station, *two* can do it at the same time.
32. All hail the USA.
31. Explosive decompression and near-absolute zero temperatures never apply to the human body.
30. Planet killer asteroid coming? Hide in your cellar!
29. NASA will let any untrained bozo go into space without giving an argument---if he happens to be one of the best damn oil rig workers in the South China Sea!
28.  But shoving a nuke into a hole drilled 0.03% of the way into its solid iron crust will split that baby right in two!
27. Prior to the giant planet killer asteroid, several hundred smaller ones travelling on the exact same trajectory always precede it, giving us ample warning by striking the Earth 3 weeks ahead of time even though we're in a totally different position in our orbit.
26. When it's your only chance to save the planet, NASA will make sure your first pit stop is with a broken-down Russian space station.
25. Massive iron rocks colliding with your Shuttle at faster than the speed of sound will not penetrate the titanium hull, but bullets will.
24. A father is always surprised to find his daughter in bed with the only eligible bachelor her age within 1000 miles, especially when said bachelor is good looking and a really nice guy to boot.
23. In a planet killer situation, NASA's biggest concern next to worldwide rioting is religious hysteria---the last thing we need when faced with the extinction of all life on the planet as we know it is people falling onto their knees and quietly praying.
22. Paris sucked anyway.
21. U.-S.-A. All The Way.
20.
19.
18. Shuttle about to crash on an asteroid? If you're a passenger, go into the wide cargo bay and don't strap yourself in.
17. Shuttle about to crash on an asteroid? If you're the pilot do not for any reason whatsoever put your space suit's helmet on.
16.
15. A father always hates it when the one nice, clean-cut and respectable guy on the rig falls in love with his daughter, especially when he loves the guy like a son.
14. Trevor Rabin needs to leave the movie industry and return to playing lead guitar for the Rock band Yes, and so does Bruce Willis.
13. Men who are overweight, out-of-shape and untrained can handle the rigors of weightlessness, cramped quarters and extended periods at heavy Gs, but the guy with two Phds always suffers from Space Dementia.
12. To create 1G of artificial gravity, a 21 foot diameter space station only needs to spin at 2 RPMs, rather than the 228 RPMs that all known laws of physics seem to require.
11. Shotguns shoot bullets, not shot.
10. Concerned about the bottom line? Don't waste any money on inconsequential things like story line and technical consultants---just make damn sure you hire the best director of TV commercials you can find.
9. When a Russian Cosmonaut places you in the deepest recesses of his space station and tells you to watch the pressure gauge in case it overloads, run for your life immediately.
8. A 250 lb. man flying off an asteroid at a velocity of 40 ft./sec. can be effectively stopped by a 175 lb. man grabbing his life-line and tugging with all his strength---don't worry, the 175 lb. man will never be pulled helplessly into space even though he is not tethered to anything himself.
7. Planet killer asteroids heal parent-child relationships better than any psychologist ever could.
6. "Deep Impact": good Science Fiction. "Armageddon": bad Science Fiction.
5. Thank God the Cold War's over because those crazy Ruskies can sure be handy to have around---give one a hammer and he can fix anything.
4. Hoo-Ray for the USA.
3. Though it lopes through the atmosphere like an overstuffed 747, when you get it into space, the Shuttle maneuvers exactly like an F/A-18 fighter jet.
2. Every oil drill needs a gatlin' gun!
1.  Copyright 1998, M. Stanley Bubien.
The author(s) hereby *grant* the right to electronically distribute this work via e-mail, ftp, and/or usenet news for non-profit purposes provided the story, title, authorship, and copyright (including this notice) remain in their original form, without modification or deletion.
In other words, you can e-mail it, ftp it, post it, or put it on a Web Site for free. Just make sure you (1) don't change the story and you (2) include the above Copyright notice.
Story Bytes appears online at <http://www.storybytes.com>
Story Bytes
** Contact:
Story Bytes better than sound bites.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


This page describes the steps involved in compiling R-devel on a Mac operating system (macOS, formerly known as OS X), with an emphasis on non-standard build configurations that can significantly improve computing performance compared to a standard build.
First we need to install some libraries and tools.
clang++ -v
Apple LLVM version 9.0.0 (clang-9<IP_ADDRESS>) Target: x86_64-apple-darwin17.3.0 Thread model: posix
Most of the following items are from the R-devel optional library list.
cd ~/Desktop curl -O http://r.research.att.com/libs/gfortran-4.8.2-darwin13.tar.bz2 sudo tar fvxz gfortran-4.8.2-darwin13.tar.bz2 -C /
The 'sudo' command will require your system password because we are placing files into areas that are password restricted (/usr/local).
Note: that you are free to choose a more recent distribution of gfortran, which may be obtained via MacPorts or Homebrew.
cd ~/Desktop curl -O http://r.research.att.com/libs/pkgconfig-0.28-darwin.15-x86_64.tar.gz sudo tar fvxz pkgconfig-0.28-darwin.15-x86_64.tar.gz -C / curl -O http://r.research.att.com/libs/xz-5.2.3-darwin.15-x86_64.tar.gz sudo tar fvxz xz-5.2.3-darwin.15-x86_64.tar.gz -C / curl -O http://r.research.att.com/libs/pcre-8.40-darwin.15-x86_64.tar.gz sudo tar fvxz pcre-8.40-darwin.15-x86_64.tar.gz -C /
cd ~/Desktop curl -O http://r.research.att.com/libs/jpeg-9-darwin.15-x86_64.tar.gz sudo tar fvxz jpeg-9-darwin.15-x86_64.tar.gz -C / curl -O http://r.research.att.com/libs/libpng-1.6.28-darwin.15-x86_64.tar.gz sudo tar fvxz libpng-1.6.28-darwin.15-x86_64.tar.gz -C / curl -O http://r.research.att.com/libs/tiff-4.0.7-darwin.15-x86_64.tar.gz sudo tar fvxz tiff-4.0.7-darwin.15-x86_64.tar.gz -C /
Create a folder to work in. For example,
cd ~/Desktop mkdir R
Then download and unpack the latest development version of R:
cd ~/Desktop/R curl -O ftp://ftp.stat.math.ethz.ch/Software/R/R-devel.tar.gz tar -zxvf R-devel.tar.gz
Alternatively, to obtain R via SVN:
svn co https://svn.r-project.org/R/trunk/ ~/Desktop/R/trunk cp -rf ~/Desktop/R/trunk ~/Desktop/R/R-devel # copy to build folder
Update when needed using
cd ~/Desktop/R/trunk svn up
Open the 'config.site' file in '~/Desktop/R/R-devel' and change the contents to the following (but see the next section for alternative configurations):
#! /bin/sh CC=clang CXX=clang++ F77=gfortran-4.8 FC=$F77 OBJC=clang CFLAGS="-Wall -mtune=core2 -g -O2" CXXFLAGS="-Wall -mtune=core2 -g -O2" OBJCFLAGS="-Wall -mtune=core2 -g -O2" F77FLAGS="-Wall -g -O2" FCFLAGS=$F77FLAGS PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig JAVA_HOME="$(/usr/libexec/java_home)" JAVA_CPPFLAGS="-I/${JAVA_HOME}/include -I/${JAVA_HOME}/include/darwin" JAVA_LD_LIBRARY_PATH="${JAVA_HOME}/jre/lib/server" JAVA_LIBS="-L/${JAVA_HOME}/jre/lib/server -ljvm"
Open a terminal window and switch to the R-devel folder:
cd ~/Desktop/R/R-devel
Set the pkg-config path as follows:
export PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig
It is possible to use an updated version of gfortran while also enabling architecture-specific optimizations such as Intel's AVX instructions.
If you've installed gcc7 using MacPorts, then create a symbolic link to the LLVM assembler in the default install directory:
cd /opt/local/bin sudo ln -s /usr/bin/clang
Then add -Wa,-q
to the Fortran flags to use LLVM's (Clang integrated) assembler:
#! /bin/sh CC=clang CXX=clang++ F77=gfortran-mp-7 FC=$F77 OBJC=clang CFLAGS="-Wall -march=native -g -O3 -ffp-contract=fast" CXXFLAGS="-Wall -march=native -g -O3 -ffp-contract=fast" OBJCFLAGS="-Wall -march=native -g -O3" F77FLAGS="-Wall -march=native -g -O3 -Wa,-q" FCFLAGS=$F77FLAGS FFLAGS=$F77FLAGS PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig JAVA_HOME="$(/usr/libexec/java_home)" JAVA_CPPFLAGS="-I/${JAVA_HOME}/include -I/${JAVA_HOME}/include/darwin" JAVA_LD_LIBRARY_PATH="${JAVA_HOME}/jre/lib/server" JAVA_LIBS="-L/${JAVA_HOME}/jre/lib/server -ljvm"
Note: Without the -Wa,-q
option, -march=native
instructions will result in an unknown symbol error.
To utilise OpenMP features we need to switch from Apple's version of LLVM. Install Clang v6.0 via MacPorts:
sudo port install clang-6.0
and modify the config.site file:
#! /bin/sh CC=clang-mp-6.0 CXX=clang++-mp-6.0 F77=gfortran-mp-7 FC=$F77 OBJC=clang-mp-6.0 CFLAGS="-Wall -march=native -g -O3 -ffp-contract=fast" CXXFLAGS="-Wall -march=native -g -O3 -ffp-contract=fast" OBJCFLAGS="-Wall -march=native -g -O3" F77FLAGS="-Wall -march=native -g -O3 -Wa,-q" FCFLAGS=$F77FLAGS FFLAGS=$F77FLAGS PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig JAVA_HOME="$(/usr/libexec/java_home)" JAVA_CPPFLAGS="-I/${JAVA_HOME}/include -I/${JAVA_HOME}/include/darwin" JAVA_LD_LIBRARY_PATH="${JAVA_HOME}/jre/lib/server" JAVA_LIBS="-L/${JAVA_HOME}/jre/lib/server -ljvm"
Note: If you receive a 'library not found for -lomp' error, add a symbolic link to libomp.dylib under /usr/local/lib:
sudo ln -s /opt/local/lib/libomp/libomp.dylib /usr/local/lib/libomp.dylib
R includes a single-threaded BLAS and Lapack distribution, but we are free to choose an external, multithreaded library.
To link against the Accelerate framework (pre-installed with macOS) run
./configure --prefix=/Users/${USER}/Desktop/R-devel --without-x --without-internal-tzcode \ --with-blas="-framework Accelerate" --with-lapack \ --enable-R-shlib --enable-memory-profiling
If you want to link against the OpenBLAS library run
./configure --prefix=/Users/${USER}/Desktop/R-devel --without-x --without-internal-tzcode \ --with-blas="-lopenblas" --with-lapack \ --enable-R-shlib --enable-memory-profiling
To build R-devel, run make:
cd ~/Desktop/R/R-devel make
The build checks are run using:
make check
Finally, we need to choose an install location for R-devel; I use /Users/${USER}/Desktop/R-devel
; I recommend installing to somewhere that does not require sudo privileges.
make prefix=/Users/${USER}/Desktop/R-devel install
For easy access to R-devel from a terminal window, add the following lines of code to your bash profile:
alias Rdevel="/where/I/installed/to/bin/R"
For example,
alias Rdevel="/Users/${USER}/Desktop/R-devel/bin/R"
To run R-devel with sudo privileges, you need to add
alias sudo='sudo '
To run R-devel from RStudio, use
export RSTUDIO_WHICH_R=/where/I/installed/to/bin/R open -n -a RStudio


Well for a long time I had wanted to try Absinthe because I read and heard alot about it but I never had the chance to buy any. Until one day about a week ago one of my friends came over and had some Absinthe with him. I nearly freaked and begged him to let me drink some. Instead of letting me drink some he gave me the bottle and told me I could have it(it wasn't full anymore he had drank most of it the night before with some friends only about 0,33 liters left).
He advised me to dilute it with some water since it's pretty harsh to drink it straight(which I also did). Well I was getting ready to go to a Party and I wasn't about to share so I drank most of it on the way to my other friends house who was gonna drive us to the party. Once at the party, I diluted the rest of the Absinthe that was still left again with water. I wasn't experiencing anything yet only a subtle buzz and a feeling of extreme calm and serenity. Almost like when I'm high.
Well about 2 hours later with the bottle already being empty I was definitely feeling something. A feeling like explained earlier just very very calm and a slight buzz. Then me and my friend went outside to talk and started walking. While walking and talking with my friend I could really feel the Absinthe. It felt like I was sort of high sort of drunk, a mixture of both I would say. And everything was calm and I felt almost weightless. This lasted for about 45 Minutes and then I could barely feel it anymore.
 I started writing a couple of lyrics and just felt very good and felt like thinking. About life about everything. And that's about all I have to report, I would definitely do this again and I'm looking forward to it next time.
Also I think I should note that while at the party I drank nothing else. I just wanted to experience the effects of the Absinthe alone.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.