These aren't really advanced, but they're getting out of the more basic levels we've already covered. In fact, if you've gotten this far, you should consider yourself fairly accomplished in the basics of Unix network programming! Congratulations!
So here we go into the brave new world of some of the more esoteric things you might want to learn about sockets. Have at it!
Blocking. You've heard about it--now what the heck is it? In a nutshell, "block" is techie jargon for "sleep". You probably noticed that when you run listener, above, it just sits there until a packet arrives. What happened is that it called recvfrom(), there was no data, and so recvfrom() is said to "block" (that is, sleep there) until some data arrives.
Lots of functions block. accept() blocks. All the recv() functions block. The reason they can do this is because they're allowed to. When you first create the socket descriptor with socket(), the kernel sets it to blocking. If you don't want a socket to be blocking, you have to make a call to fcntl():
#include <unistd.h> #include <fcntl.h> . . sockfd = socket(AF_INET, SOCK_STREAM, 0); fcntl(sockfd, F_SETFL, O_NONBLOCK); . . |
By setting a socket to non-blocking, you can effectively "poll" the socket for information. If you try to read from a non-blocking socket and there's no data there, it's not allowed to block--it will return -1 and errno will be set to EWOULDBLOCK.
Generally speaking, however, this type of polling is a bad idea.  A more elegant solution for checking to see if there's data waiting to be read comes in the following section on select().
This function is somewhat strange, but it's very useful.
No problem, you say, just an accept() and a couple of recv()s. Not so fast, buster! What if you're blocking on an accept() call? How are you going to recv() data at the same time? "Use non-blocking sockets!" No way! You don't want to be a CPU hog. What, then?
select() gives you the power to monitor several sockets at the same time. It'll tell you which ones are ready for reading, which are ready for writing, and which sockets have raised exceptions, if you really want to know that.
Without any further ado, I'll offer the synopsis of select():
#include <sys/time.h> #include <sys/types.h> #include <unistd.h> int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); |
The function monitors "sets" of file descriptors; in particular readfds, writefds, and exceptfds. If you want to see if you can read from standard input and some socket descriptor, sockfd, just add the file descriptors 0 and sockfd to the set readfds. The parameter numfds should be set to the values of the highest file descriptor plus one. In this example, it should be set to sockfd+1, since it is assuredly higher than standard input (0).
When select() returns, readfds will be modified to reflect which of the file descriptors you selected which is ready for reading. You can test them with the macro FD_ISSET(), below.
Before progressing much further, I'll talk about how to manipulate these sets. Each set is of the type fd_set. The following macros operate on this type:
FD_ZERO(fd_set *set) -- clears a file descriptor set
FD_SET(int fd, fd_set *set) -- adds fd to the set
FD_CLR(int fd, fd_set *set) -- removes fd from the set
FD_ISSET(int fd, fd_set *set) -- tests to see if fd is in the set
Finally, what is this weirded out struct timeval? Well, sometimes you don't want to wait forever for someone to send you some data. Maybe every 96 seconds you want to print "Still Going..." to the terminal even though nothing has happened. This time structure allows you to specify a timeout period. If the time is exceeded and select() still hasn't found any ready file descriptors, it'll return so you can continue processing.
The struct timeval has the follow fields:
struct timeval { int tv_sec; // seconds int tv_usec; // microseconds }; |
Just set tv_sec to the number of seconds to wait, and set tv_usec to the number of microseconds to wait. Yes, that's microseconds, not milliseconds. There are 1,000 microseconds in a millisecond, and 1,000 milliseconds in a second. Thus, there are 1,000,000 microseconds in a second. Why is it "usec"? The "u" is supposed to look like the Greek letter μ (Mu) that we use for "micro". Also, when the function returns, timeout might be updated to show the time still remaining. This depends on what flavor of Unix you're running.
Yay! We have a microsecond resolution timer! Well, don't count on it. Standard Unix timeslice is around 100 milliseconds, so you might have to wait that long no matter how small you set your struct timeval.
Other things of interest: If you set the fields in your struct timeval to 0, select() will timeout immediately, effectively polling all the file descriptors in your sets. If you set the parameter timeout to NULL, it will never timeout, and will wait until the first file descriptor is ready. Finally, if you don't care about waiting for a certain set, you can just set it to NULL in the call to select().
The following code snippet waits 2.5 seconds for something to appear on standard input:
/* ** select.c -- a select() demo */ #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #define STDIN 0 // file descriptor for standard input int main(void) { struct timeval tv; fd_set readfds; tv.tv_sec = 2; tv.tv_usec = 500000; FD_ZERO(&readfds); FD_SET(STDIN, &readfds); // don't care about writefds and exceptfds: select(STDIN+1, &readfds, NULL, NULL, &tv); if (FD_ISSET(STDIN, &readfds)) printf("A key was pressed!\n"); else printf("Timed out.\n"); return 0; } |
If you're on a line buffered terminal, the key you hit should be RETURN or it will time out anyway.
Now, some of you might think this is a great way to wait for data on a datagram socket--and you are right: it might be. Some Unices can use select in this manner, and some can't. You should see what your local man page says on the matter if you want to attempt it.
Some Unices update the time in your struct timeval to reflect the amount of time still remaining before a timeout. But others do not. Don't rely on that occurring if you want to be portable. (Use gettimeofday() if you need to track time elapsed. It's a bummer, I know, but that's the way it is.)
What happens if a socket in the read set closes the connection? Well, in that case, select() returns with that socket descriptor set as "ready to read". When you actually do recv() from it, recv() will return 0. That's how you know the client has closed the connection.
One more note of interest about select(): if you have a socket that is listen()ing, you can check to see if there is a new connection by putting that socket's file descriptor in the readfds set.
And that, my friends, is a quick overview of the almighty select() function.
But, by popular demand, here is an in-depth example. Unfortunately, the difference between the dirt-simple example, above, and this one here is significant. But have a look, then read the description that follows it.
This program acts like a simple multi-user chat server. Start it running in one window, then telnet to it ("telnet hostname 9034") from multiple other windows. When you type something in one telnet session, it should appear in all the others.
/* ** selectserver.c -- a cheezy multiperson chat server */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define PORT 9034 // port we're listening on int main(void) { fd_set master; // master file descriptor list fd_set read_fds; // temp file descriptor list for select() struct sockaddr_in myaddr; // server address struct sockaddr_in remoteaddr; // client address int fdmax; // maximum file descriptor number int listener; // listening socket descriptor int newfd; // newly accept()ed socket descriptor char buf[256]; // buffer for client data int nbytes; int yes=1; // for setsockopt() SO_REUSEADDR, below int addrlen; int i, j; FD_ZERO(&master); // clear the master and temp sets FD_ZERO(&read_fds); // get the listener if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket"); exit(1); } // lose the pesky "address already in use" error message if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { perror("setsockopt"); exit(1); } // bind myaddr.sin_family = AF_INET; myaddr.sin_addr.s_addr = INADDR_ANY; myaddr.sin_port = htons(PORT); memset(&(myaddr.sin_zero), '\0', 8); if (bind(listener, (struct sockaddr *)&myaddr, sizeof(myaddr)) == -1) { perror("bind"); exit(1); } // listen if (listen(listener, 10) == -1) { perror("listen"); exit(1); } // add the listener to the master set FD_SET(listener, &master); // keep track of the biggest file descriptor fdmax = listener; // so far, it's this one // main loop for(;;) { read_fds = master; // copy it if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) { perror("select"); exit(1); } // run through the existing connections looking for data to read for(i = 0; i <= fdmax; i++) { if (FD_ISSET(i, &read_fds)) { // we got one!! if (i == listener) { // handle new connections addrlen = sizeof(remoteaddr); if ((newfd = accept(listener, (struct sockaddr *)&remoteaddr, &addrlen)) == -1) { perror("accept"); } else { FD_SET(newfd, &master); // add to master set if (newfd > fdmax) { // keep track of the maximum fdmax = newfd; } printf("selectserver: new connection from %s on " "socket %d\n", inet_ntoa(remoteaddr.sin_addr), newfd); } } else { // handle data from a client if ((nbytes = recv(i, buf, sizeof(buf), 0)) <= 0) { // got error or connection closed by client if (nbytes == 0) { // connection closed printf("selectserver: socket %d hung up\n", i); } else { perror("recv"); } close(i); // bye! FD_CLR(i, &master); // remove from master set } else { // we got some data from a client for(j = 0; j <= fdmax; j++) { // send to everyone! if (FD_ISSET(j, &master)) { // except the listener and ourselves if (j != listener && j != i) { if (send(j, buf, nbytes, 0) == -1) { perror("send"); } } } } } } // it's SO UGLY! } } } return 0; } |
Notice I have two file descriptor sets in the code: master and read_fds. The first, master, holds all the socket descriptors that are currently connected, as well as the socket descriptor that is listening for new connections.
The reason I have the master set is that select() actually changes the set you pass into it to reflect which sockets are ready to read. Since I have to keep track of the connections from one call of select() to the next, I must store these safely away somewhere. At the last minute, I copy the master into the read_fds, and then call select().
 Yup! And every time a connection closes, I have to remove it from the master set? Yes, it does.
Notice I check to see when the listener socket is ready to read. When it is, it means I have a new connection pending, and I accept() it and add it to the master set. Similarly, when a client connection is ready to read, and recv() returns 0, I know the client has closed the connection, and I must remove it from the master set.
If the client recv() returns non-zero, though, I know some data has been received. So I get it, and then go through the master list and send that data to all the rest of the connected clients.
And that, my friends, is a less-than-simple overview of the almighty select() function.
Remember back in the section about send(), above, when I said that send() might not send all the bytes you asked it to? That is, you want it to send 512 bytes, but it returns 412. What happened to the remaining 100 bytes?
Well, they're still in your little buffer waiting to be sent out. Due to circumstances beyond your control, the kernel decided not to send all the data out in one chunk, and now, my friend, it's up to you to get the data out there.
You could write a function like this to do it, too:
#include <sys/types.h> #include <sys/socket.h> int sendall(int s, char *buf, int *len) { int total = 0; // how many bytes we've sent int bytesleft = *len; // how many we have left to send int n; while(total < *len) { n = send(s, buf+total, bytesleft, 0); if (n == -1) { break; } total += n; bytesleft -= n; } *len = total; // return number actually sent here return n==-1?-1:0; // return -1 on failure, 0 on success } |
In this example, s is the socket you want to send the data to, buf is the buffer containing the data, and len is a pointer to an int containing the number of bytes in the buffer.
The function returns -1 on error (and errno is still set from the call to send().) Also, the number of bytes actually sent is returned in len. This will be the same number of bytes you asked it to send, unless there was an error. sendall() will do it's best, huffing and puffing, to send the data out, but if there's an error, it gets back to you right away.
For completeness, here's a sample call to the function:
char buf[10] = "Beej!"; int len; len = strlen(buf); if (sendall(s, buf, &len) == -1) { perror("sendall"); printf("We only sent %d bytes because of the error!\n", len); } |
What happens on the receiver's end when part of a packet arrives? If the packets are variable length, how does the receiver know when one packet ends and another begins?  You probably have to encapsulate (remember that from the data encapsulation section way back there at the beginning?) Read on for details!
What does it really mean to encapsulate data, anyway? In the simplest case, it means you'll stick a header on there with either some identifying information or a packet length, or both.
What should your header look like? Well, it's just some binary data that represents whatever you feel is necessary to complete your project.
Wow. That's vague.
Okay. For instance, let's say you have a multi-user chat program that uses SOCK_STREAMs. When a user types ("says") something, two pieces of information need to be transmitted to the server: what was said and who said it.
So far so good? "What's the problem?" you're asking.
The problem is that the messages can be of varying lengths. One person named "tom" might say, "Hi", and another person named "Benjamin" might say, "Hey guys what is up?"
So you send() all this stuff to the clients as it comes in.  How does the client know when one message starts and another stops?  But that wastes bandwidth! We don't want to send() 1024 bytes just so "tom" can say "Hi".
So we encapsulate the data in a tiny header and packet structure. Both the client and server know how to pack and unpack (sometimes referred to as "marshal" and "unmarshal") this data. Don't look now, but we're starting to define a protocol that describes how a client and server communicate!
In this case, let's assume the user name is a fixed length of 8 characters, padded with '\0'. And then let's assume the data is variable length, up to a maximum of 128 characters. Let's have a look a sample packet structure that we might use in this situation:
len (1 byte, unsigned) -- The total length of the packet, counting the 8-byte user name and chat data.
name (8 bytes) -- The user's name, NUL-padded if necessary.
chatdata (n-bytes) -- The data itself, no more than 128 bytes. The length of the packet should be calculated as the length of this data plus 8 (the length of the name field, above).
Why did I choose the 8-byte and 128-byte limits for the fields? I pulled them out of the air, assuming they'd be long enough. Maybe, though, 8 bytes is too restrictive for your needs, and you can have a 30-byte name field, or whatever. The choice is up to you.
Using the above packet definition, the first packet would consist of the following information (in hex and ASCII):
0A 74 6F 6D 00 00 00 00 00 48 69 (length) T o m (padding) H i |
And the second is similar:
14 42 65 6E 6A 61 6D 69 6E 48 65 79 20 67 75 79 73 20 77 ... (length) B e n j a m i n H e y g u y s w ... |
(The length is stored in Network Byte Order, of course. In this case, it's only one byte so it doesn't matter, but generally speaking you'll want all your binary integers to be stored in Network Byte Order in your packets.)
When you're sending this data, you should be safe and use a command similar to sendall(), above, so you know all the data is sent, even if it takes multiple calls to send() to get it all out.
Likewise, when you're receiving this data, you need to do a bit of extra work. To be safe, you should assume that you might receive a partial packet (like maybe we receive "00 14 42 65 6E" from Benjamin, above, but that's all we get in this call to recv()). We need to call recv() over and over again until the packet is completely received.
But how? Well, we know the number of bytes we need to receive in total for the packet to be complete, since that number is tacked on the front of the packet. We also know the maximum packet size is 1+8+128, or 137 bytes (because that's how we defined the packet.)
What you can do is declare an array big enough for two packets. This is your work array where you will reconstruct packets as they arrive.
Every time you recv() data, you'll feed it into the work buffer and check to see if the packet is complete. That is, the number of bytes in the buffer is greater than or equal to the length specified in the header (+1, because the length in the header doesn't include the byte for the length itself.) If the number of bytes in the buffer is less than 1, the packet is not complete, obviously. You have to make a special case for this, though, since the first byte is garbage and you can't rely on it for the correct packet length.
Once the packet is complete, you can do with it what you will. Use it, and remove it from your work buffer.
Whew!  Well, here's the second of the one-two punch: you might have read past the end of one packet and onto the next in a single recv() call. That is, you have a work buffer with one complete packet, and an incomplete part of the next packet! Bloody heck. (But this is why you made your work buffer large enough to hold two packets--in case this happened!)
Since you know the length of the first packet from the header, and you've been keeping track of the number of bytes in the work buffer, you can subtract and calculate how many of the bytes in the work buffer belong to the second (incomplete) packet. When you've handled the first one, you can clear it out of the work buffer and move the partial second packed down the to front of the buffer so it's all ready to go for the next recv().
(Some of you readers will note that actually moving the partial second packet to the beginning of the work buffer takes time, and the program can be coded to not require this by using a circular buffer. Unfortunately for the rest of you, a discussion on circular buffers is beyond the scope of this article. If you're still curious, grab a data structures book and go from there.)
I never said it was easy. Ok, I did say it was easy. And it is; you just need practice and pretty soon it'll come to you naturally. By Excalibur I swear it!


Watch your Head
Ultimate Frisbee is a sport that I never played myself, but it's popularity is something hard to ignore in many Midwestern college towns. Students (and people who wish they were still students) spend the few briefs months of good weather, sprinting down fields, hurling frisbees, and yelling "Stack!!".
What I find much more entertaining is the large number of people who continue to play when the weather gets windy and the night sky darkens around oh....4:15pm. The sight of frisbees boomeranging in the wind is topped only by the knowledge that even when you can't seem, those same plastic discs of death are probably hurtling through the dark night sky at 8 or 9 o'clock in the evening.
Ultimate Frisbee requires a great deal of stamina and dexterity. Not surprisingly, the IOC officially recognized Ultimate as a sport in 2015. It can go up against other sports for inclusion in Olympic games.


{% extends 'pico/home.html' %} {% block content_block %}
This portion of the site is currently under construction. Come back later.


--- layout: main title: About permalink: /about/index.html ---
I'm Frank Wu. I love to learn, tinker, and create beautiful things.
These days, I'm building Taro Health in NYC. We're on a mission to bring affordable, high-quality healthcare to more Americans.
As a student at Yale, I encouraged others to learn how to program and build cool things. I cofounded YHack, Yale's annual 1000 person hackathon; started CodeBlue, a day-long coding bootcamp for 300-some New Haven high school students; and served as a teaching assistant for CS50, where I taught a 90-minute section, graded problem sets, and held office hours.
Along the way, I've also worked at Marriott as a management intern, at software startup Honey as an early engineer, and started a music blog that interviewed Grammy Award winning artists.
If you're working on something cool, I'd love to meet you! Shoot me an email at<EMAIL_ADDRESS>or find me on Twitter at @frankjwu.
You can also find me elsewhere on the web:
This site was built using Jekyll, "a simple, blog aware, static site generator." You can fork the entire site on my GitHub and use it to build your own.


Dashboard
Temperate and Pressure readings from around the house!
Time Window
Day
3 Days
Week
Interval
1 minute
5 minutes
15 minutes
30 minutes
60 minutes
Unit
Fahrenheit
Celcius
Update
24h Extremes
Max temp: {{max_temp}} @ {{max_time}}
Min temp: {{min_temp}} @ {{min_time}}


Case 1
Go Back
Stats
Defendant:
Defendant Representative:
Plaintiff:
Plaintiff Representative:
Discipline:
Jurisdiction:
Value:
Case Handler:
Contact Person:
Progress of case
Pre-litigation
Subpoena
Points of defence
Reply
Rejoinder
Decision
Phases
Amount
Points of defence
30.000 DKK
Extend
Description
Amount
External law firm fees
20.000 DKK
Extend
Consultant fees
5.000 DKK
Extend
Other fees
5.000 DKK
Extend


Official Statistics
Statistics about 16- to 18-year-olds not in education, employment or training (NEET).
Ref: OSR13/2011 PDF , 203KB , 11 pages
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 73.5KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 76.5KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet , 63.5KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
ZIP , 28KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
Plain text , 2.37KB
If you use assistive technology (such as a screen reader) and need a version of this document in a more accessible format, please email<EMAIL_ADDRESS>. Please tell us what format you need. It will help us if you say what assistive technology you use.
Reference Id: OSR13/2011
Publication type: Statistical Release
Region: England
Release date: 24 August 2011
Coverage status: Final
Publication status: Published
This brief sets out the latest statistics available on young people who are NEET (not in education, employment or training) in England from the DfE 16 to 18 Participation statistical first release, the Labour Force Survey, and regional NEET figures.
Emily Uttley
0114 274 2442
Published: 24 August 2011


[1]
previously , i wanted to try the overall experience -/: and it was more than perfect .
[2]
the air planes landing and taking off -/: without any noise -/: just the inspiring view .


Describes a custom grid effect for every key.
More...
Describes a custom grid effect for every key.
Definition at line 38 of file Custom.cs.
| Corale.Colore.Razer.Keyboard.Effects.Custom.Custom |
( |
Color |
color | ) |
|
Initializes a new instance of the Custom struct with every position set to a specific color.
- Parameters
-
| color | The Color to set each position to. |
Definition at line 67 of file Custom.cs.
| Corale.Colore.Razer.Keyboard.Effects.Custom.Custom |
( |
Custom |
other | ) |
|
Initializes a new instance of the Custom struct with the colors copied from another struct of the same type.
- Parameters
-
| other | The Custom struct to copy data from. |
Definition at line 81 of file Custom.cs.
| void Corale.Colore.Razer.Keyboard.Effects.Custom.Clear |
( |
| ) |
|
| Custom Corale.Colore.Razer.Keyboard.Effects.Custom.Clone |
( |
| ) |
|
Returns a copy of this struct.
- Returns
- A copy of this struct.
Definition at line 253 of file Custom.cs.
| static Custom Corale.Colore.Razer.Keyboard.Effects.Custom.Create |
( |
| ) |
|
|
static |
Creates a new empty Custom struct.
- Returns
- An instance of Custom filled with the color black.
Definition at line 243 of file Custom.cs.
| override bool Corale.Colore.Razer.Keyboard.Effects.Custom.Equals |
( |
object |
obj | ) |
|
Indicates whether this instance and a specified object are equal.
- Returns
true
if obj and this instance are of compatible types and represent the same value; otherwise, false
.
- Parameters
-
| obj | Another object to compare to. |
<filterpriority>2</filterpriority>
Definition at line 287 of file Custom.cs.
| bool Corale.Colore.Razer.Keyboard.Effects.Custom.Equals |
( |
Custom |
other | ) |
|
Indicates whether the current object is equal to another object of the same type.
- Returns
true
if the current object is equal to the other parameter; otherwise, false
.
- Parameters
-
| other | A Custom to compare with this object. |
Definition at line 306 of file Custom.cs.
| override int Corale.Colore.Razer.Keyboard.Effects.Custom.GetHashCode |
( |
| ) |
|
Returns the hash code for this instance.
- Returns
- A 32-bit signed integer that is the hash code for this instance.
Definition at line 270 of file Custom.cs.
| static bool Corale.Colore.Razer.Keyboard.Effects.Custom.operator!= |
( |
Custom |
left, |
|
|
object |
right |
|
) |
| |
|
static |
Compares an instance of Custom with another object for inequality.
- Parameters
-
| left | The left operand, an instance of Custom. |
| right | The right operand, any type of object. |
- Returns
true
if the two objects are not equal, otherwise false
.
Definition at line 233 of file Custom.cs.
| static bool Corale.Colore.Razer.Keyboard.Effects.Custom.operator== |
( |
Custom |
left, |
|
|
object |
right |
|
) |
| |
|
static |
Compares an instance of Custom with another object for equality.
- Parameters
-
| left | The left operand, an instance of Custom. |
| right | The right operand, any type of object. |
- Returns
true
if the two objects are equal, otherwise false
.
Definition at line 221 of file Custom.cs.
| void Corale.Colore.Razer.Keyboard.Effects.Custom.Set |
( |
Color |
color | ) |
|
Sets the entire grid to a specific Color.
- Parameters
-
Definition at line 322 of file Custom.cs.
| readonly Color [] Corale.Colore.Razer.Keyboard.Effects.Custom._colors |
|
private |
Color definitions for each key on the keyboard.
The array is 1-dimensional, but will be passed to code expecting a 2-dimensional array. Access to this array is done using indices according to: column + row * Constants.MaxColumns
Definition at line 49 of file Custom.cs.
| readonly Color [] Corale.Colore.Razer.Keyboard.Effects.Custom._keys |
|
private |
Color definitions for the key translation mode.
Colors set in here will, if flagged with 0x01000000
, automatically be translated to the proper keyboard location depending on the users keyboard configuration.
Definition at line 60 of file Custom.cs.
| Color Corale.Colore.Razer.Keyboard.Effects.Custom.this[int index] |
|
getset |
Gets or sets a position in the custom grid.
- Parameters
-
| index | The index to access, zero indexed. |
- Returns
- The Color at the specified position.
Definition at line 155 of file Custom.cs.
| Color Corale.Colore.Razer.Keyboard.Effects.Custom.this[int row, int column] |
|
getset |
Gets or sets cells in the custom grid.
- Parameters
-
| row | Row to access, zero indexed. |
| column | Column to access, zero indexed. |
- Returns
- The Color at the specified position.
Definition at line 101 of file Custom.cs.
| Color Corale.Colore.Razer.Keyboard.Effects.Custom.this[Key key] |
|
getset |
Gets or sets the color for a specific key in the custom grid. The SDK will handle translation of location data to access the correct key depending on user configuration.
- Parameters
-
- Returns
- The Color for the specified key.
Please note that the position of a key accessed in this way is not guaranteed to be correct, as different layouts on different keyboards can place these keys in other locations.
Definition at line 198 of file Custom.cs.
The documentation for this struct was generated from the following file:
- Corale.Colore/Razer/Keyboard/Effects/Custom.cs


This example uses web scraping to gather data, plot it on a map, and display a Plotly interactive boxplot.
Technologies Used: Python, Pandas, Seaborn, Plotly, Jupyter, Leaflet, OpenStreetMap, Stamen Watercolor basemap, and Illustrator
Data Sources: DarkSky API and NextRad Radar Data
Overview
This project involves scraping temperature data from the DarkSky Forecast API, plotting the data from six cities using the Seaborn and Plotly data analysis libraries, and showing current weather radar data on a map marked with the six cities.
The web map uses open source software and real-time weather radar data. (Click on the "layers" icon in the upper right corner of the map to view the different basemaps.)
To view the code used to scrape data from the Dark Sky Forecast API and process it, see the Jupyter Notebook for this project. (The boxplot in the Jupyter Notebook uses the Seaborn library rather than Plotly.)
Interactive Plotly Boxplot
The HTML page for this project uses a Plotly boxplot which allows the user to hover over the boxes in the plot to see the exact values of the relevant statistics.
For this time period (6/7/16 - 7/6/16), the data show that the daily high temperature for Austin has the smallest fluctuation changing only 12.88 degrees over the 30-days compared to Los Angeles, which has the largest range of 28.10°F.
Austin also has the highest mean maximum temperature over the period, indicating that not only is the daily high temperature relatively consistent, but also it just plain hot in Austin in June. Seattle has the lowest daily high temperatures of the six cities considered, which is not surprising given the generally cloudier and rainier climate of the Pacific Northwest, even in June.
This project invovled classifying remotely-sensed near-infrared imagery to quantify land loss due to Hurricane Irene.
Technologies Used: ENVI and ArcGIS
Data Sources: Google Earth and the North Carolina Department of Transportation (NCDOT)
Overview & Contextual Map
This study used remotely-sensed near-infrared aerial imagery to ultimately measure Hurricane Irene's changes in vegetation, water and land areas on Hatteras Island, NC.
The map to the left shows Hatteras Island, North Carolina, highlighting two areas - Pea Island and Rodanthe - where Hurricane Irene washed out sections of Highway 12 on August 27, 2011 disconnecting the island from the rest of the Outer Banks and mainland. Hatteras Island was accessible only by ferry boat until a temporary bridge was installed on October 10, 2011.
Satellite Photograph - Before Hurricane Irene
Left is a Google Earth satellite image of the Pea Island area of Hatteras Island before Irene hit on August 27, 2011. The road is shown in grey. The Atlantic Ocean is to the right (or east), the Pamlico Sound is to the left (or west) in this image.
Satellite Photograph - After Hurricane Irene
This Google Earth satellite image of the Pea Island area taken after Irene hit shows a new inlet that connects the Sound and the Atlantic. As Irene moved northward, it passed over Pamilico Sound which ultimately caused floodwaters to flow from the Sound-side of the island toward the Atlantic side washing out Highway 12 in several locations.
Near-Infrared Aerial Image of Hatteras Island, NC
Left is a remotely sensed aerial image taken via airplane on August 2, 2011 of the Pea Island area of Hatteras Island before Irene hit on August 27, 2011. The highway is shown in bright red and green vegetation is shown in a maroonish red color.
Classification of Land and Water Types Before Hurricane Irene Hit
Since the goal of this study was to quantify changes in water and land areas as a result of Hurricane Irene, my approach involved classifying both the before and after near-infrared images, then determining which areas changed classes between the two images.
This classification image shows the Pea Island area before the hurricane hit. Water from Pamlico Sound is colored cyan, vegetation is dark blue, the road is green, sand is red, a mixture of sand and vegetation is pinkish-grey and the Atlantic Ocean waters are bright pink and yellow - the bright pink showing the swash zone where the waves are breaking and the water is turbid and full of suspended sediment.
Classification of Land and Water Types After Hurricane Irene Hit
This classification image shows the new inlet - the cyan color cutting horizontally across the middle of the image.
The set of classes (road, vegetation, sound water, etc.) was determined using ENVI's Principal Component Analysis (PCA) of the near-infrared data in the before image. This set of classes was then applied to the after image to determine which areas changed from one class to another.
Near-Infrared Aerial Image Showing Amount of Road Loss Near Pea Island
The dashed red line shows the remaining road area after Hurricane Irene washed part of Highway 12 away. The reduced road area is superimposed on the image of the Pea Island section before the storm hit. Hurricane Irene destroyed 2,330.4 square meters of road in this section of Hatteras Island. Other areas of the Island suffered additional road loss not pictured here. The land lost due to inlet formation in the Pea Island section of Hatteras Island is 57,629.0 square meters.
Details of the New York Times Kaggle Competition
Image created by Holly Davis using the Wordle software.
Competition goal: Predict the popularity of New York Times blog articles.
Algorithms Used: I tested logistic regression, CART and random forest statistical models, as well using k-means clustering and bag of words algorithms to improve model results.
Data preparation/Model training: I explored imputing missing data and used 10-fold cross-validation for training the models.
Result: Despite using cross-validation, my final model overfit the data causing my final rank in the competition to be 965 out of 2923 competitors (within the top 33% of competitors). Had I not wanted to squeeze out a little more performance (or if I had had less time to devote to the competition), I would have stopped with a simpler, but quite satisfying random forest model which would have placed 383 out of 2923 (within the top 13% of competitors).
This Kaggle competition involved analyizing data from the "Show of Hands" app.
Technologies Used: R, Kaggle
Data Sources: Show of Hands data
Image credit: Show of Hands
Details of the Kaggle Competition
Image credit: Show of Hands. Image shows the type of data that can be collected using the Show of Hands app.
Competition goal: Predict voting outcomes using informal polling questions from the "Show of Hands" app.
Algorithms Used: Linear regression, CART and random forest.
Data preparation/Model training: During data exploration, I determined that some records were invalid due to a key variable being out of bounds. After removing this spurious data, I imputed values that were missing.
Result: My final rank in the competition was 110 out of 2875 competitors (within the top 4% of competitors). I attribute my high rank to my data preparation since the algorithms used and the training were straightforward.


For more information, check out the code on Github.
The map below is a quick example of the API in action. Click anywhere to find the 5 closest points.


KKR reaches halfway in US$3 billion Asia infrastructure fundraising: source
Global private equity group KKR & Co has raised US$1.5 billion for its first Asia-focused infrastructure fund, roughly half the total targeted, one person with direct knowledge said. KKR began to target Asia's infrastructure sector with a series of hires beginning about a year ago and launched its fundraising in 2019.
HONG KONG: Global private equity group KKR & Co has raised US$1.5 billion for its first Asia-focused infrastructure fund, roughly half the total targeted, one person with direct knowledge said. KKR began to target Asia's infrastructure sector with a series of hires beginning about a year ago and launched its fundraising in 2019.
The source declined to be named because the information was not public. KKR declined to comment.
The fundraising comes as private equity firms globally shift from focusing purely on buyouts towards becoming all-round investment houses with a series of alternative assets, such as infrastructure, real estate, hedge funds and credit.
KKR has about a dozen people in the region focused on infrastructure, according to the person. It made its first investment in the sector with a US$400 million deal taking control of India Grid Trust (IndiGrid).
Separately, the firm has begun raising its fourth Asian private equity fund, aiming to raise US$15 billion, Reuters reported this month.
The firm has also been raising a real estate fund for Asia,targeting US$1.5 billion, Reuters reported in March.
(Reporting by Kane Wu; Editing by Edmund Blair)


Toasts allow you to show callback on a corner of your app.
Warning: You have to manually create and kill your toasts for now, they will be added in the NG package in the future.

<button class="toasts-item-kill"></button>
...

<button class="toasts-item-kill"></button>
...


Rebirth - 100 days of code
January 2, 2017
Hey there, it’s been a while.
So initialy I wanted to start this blog to share a little bit more about my first work as a Junior Front End Developer, and more specifically my TypeScript learning process. Unfortunately, I “kinda” forgot about the idea because there’s so little time in a developer’s life… ;)
But still, I really want to document my future learning process, as it may be usefull to somebody else later on the internet.
Last week, I ran across this Medium article on Free Code Camp newsletter, which basically challenge you to do 1 hour of coding for 100 days. The timing was perfect so why not give it a try. I already code everyday as my day job, but lately i’ve been interested about the whole process to create new habits, which can be very powerfull. I’m currently reading this book about it.
Also, besides my job, I rarely coded on a side project, which is a shame in some way.
Part of the challenge is to document and share with others the process behind those 100 days of code.
So it’s kinda cool because i’m going to use this blog again yeyyy!
Let’s do this bruthas & sistas.


Welcome Message That Presents The Company
You can easily change the formatting of selected text in the document text by choosing a look for the selected text from
the Quick Styles gallery on the Home tab.
You can also format text directly by using the other controls on the Home tab.
Most controls offer a choice of using the look from the current theme or using a format that you specify directly.
The galleries includeitems that are designed to coordinate with the overall look of your document.
MORE
The galleries includeitems that are designed to coordinate with the overall look of your document.
MORE
The galleries includeitems that are designed to coordinate with the overall look of your document.
MORE
The galleries includeitems that are designed to coordinate with the overall look of your document.
MORE
Latest News
Testimonials
23
DEC
To change the looks available in the
Both the Themes gallery and the Quick Styles gallery provide reset commands so that you can always restore the look of your document.
READ MORE
23
DEC
To change the looks available in the
Both the Themes gallery and the Quick Styles gallery provide reset commands so that you can always restore the look of your document.
READ MORE
To change the overall look of your document, choose new Theme elements on the Page Layout tab. To change the looks available in the Quick Style gallery. Both the Themes gallery and the Quick Styles gallery provide
Change Current Quick Style Set.


|
Flat top headstone with shaped shoulders, 3 kerbstones and 2 posts. Tablet to head end and flower holder to foot end.
Headstone inscription
IN LOVING MEMO[R]Y OF A DEVOTED HUSBAND AND FATHER HERBERT ROY MOSS WHO FEL[L] ASL[E]EP JUNE 14TH 1961 AGED 55 YEARS. ALSO OF A DEVOTED WIFE AND MOTHER EDNA MAUD WHO FELL ASLEEP JUNE 8TH 1980 AGED 73 YEARS "NOT MY WILL, O LORD, BUT THINE BE DONE"
On tablet:
ALSO THEIR SON COLIN MICHAEL MOSS WHO DIED 8TH FEB 1996 AGED 66 YEARS REST IN PEACE
On east face of one pillar the mason's mark
BILES.
Burial Register: C137 C258 C377
|
|


The following document contains the results of Checkstyle 6.11.2 with sun_checks.xml ruleset.
| File | I | W | E |
|---|---|---|---|
| com/iot/Main.java | 0 | 0 | 57 |
| com/iot/model/CocoaDrink.java | 0 | 0 | 8 |
| com/iot/model/CoffeeDrink.java | 0 | 0 | 12 |
| com/iot/model/Drink.java | 0 | 0 | 23 |
| com/iot/model/Tea.java | 0 | 0 | 7 |
| manager/MenuManager.java | 0 | 0 | 16 |
| model/enums/CoffeePackType.java | 0 | 0 | 3 |
| model/enums/DrinkSortType.java | 0 | 0 | 8 |
| model/enums/DrinkType.java | 0 | 0 | 6 |
| Category | Rule | Violations | Severity |
|---|---|---|---|
| blocks | AvoidNestedBlocks | 8 | Error |
| coding | MagicNumber | 35 | Error |
| design | DesignForExtension | 1 | Error |
| javadoc | JavadocMethod | 42 | Error |
| JavadocPackage | 4 | Error | |
| JavadocType | 6 | Error | |
| JavadocVariable | 25 | Error | |
| sizes | LineLength | 18 | Error |
| ParameterNumber | 1 | Error |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocPackage | Missing package-info.java file. | |
| Error | javadoc | JavadocType | Missing a Javadoc comment. | 15 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 16 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 19 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 89). | 20 |
| Error | coding | MagicNumber | '50' is a magic number. | 20 |
| Error | coding | MagicNumber | '12' is a magic number. | 20 |
| Error | coding | MagicNumber | '50' is a magic number. | 21 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 87). | 22 |
| Error | coding | MagicNumber | '250' is a magic number. | 22 |
| Error | coding | MagicNumber | '5' is a magic number. | 22 |
| Error | coding | MagicNumber | '150' is a magic number. | 23 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 94). | 24 |
| Error | coding | MagicNumber | '250' is a magic number. | 24 |
| Error | coding | MagicNumber | '15' is a magic number. | 24 |
| Error | coding | MagicNumber | '150' is a magic number. | 25 |
| Error | coding | MagicNumber | '100' is a magic number. | 25 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 83). | 26 |
| Error | coding | MagicNumber | '150' is a magic number. | 26 |
| Error | coding | MagicNumber | '16' is a magic number. | 26 |
| Error | coding | MagicNumber | '110' is a magic number. | 27 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 91). | 28 |
| Error | coding | MagicNumber | '150' is a magic number. | 28 |
| Error | coding | MagicNumber | '16' is a magic number. | 28 |
| Error | coding | MagicNumber | '40' is a magic number. | 29 |
| Error | coding | MagicNumber | '110' is a magic number. | 29 |
| Error | coding | MagicNumber | '250' is a magic number. | 30 |
| Error | coding | MagicNumber | '46' is a magic number. | 30 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 87). | 31 |
| Error | coding | MagicNumber | '250' is a magic number. | 31 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 82). | 33 |
| Error | coding | MagicNumber | '450' is a magic number. | 33 |
| Error | coding | MagicNumber | '54' is a magic number. | 33 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 84). | 35 |
| Error | coding | MagicNumber | '950' is a magic number. | 35 |
| Error | coding | MagicNumber | '94' is a magic number. | 35 |
| Error | coding | MagicNumber | '6' is a magic number. | 36 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 85). | 37 |
| Error | coding | MagicNumber | '450' is a magic number. | 37 |
| Error | coding | MagicNumber | '74' is a magic number. | 37 |
| Error | coding | MagicNumber | '3' is a magic number. | 38 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 82). | 61 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 70 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 74 |
| Error | coding | MagicNumber | '3' is a magic number. | 83 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 83 |
| Error | coding | MagicNumber | '4' is a magic number. | 89 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 89 |
| Error | coding | MagicNumber | '5' is a magic number. | 95 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 95 |
| Error | coding | MagicNumber | '6' is a magic number. | 101 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 101 |
| Error | coding | MagicNumber | '7' is a magic number. | 109 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 109 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 90). | 113 |
| Error | coding | MagicNumber | '8' is a magic number. | 119 |
| Error | blocks | AvoidNestedBlocks | Avoid nested blocks. | 120 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocPackage | Missing package-info.java file. | |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 13 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 15 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 103). | 18 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 18 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 104). | 19 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 24 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 28 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocType | Missing a Javadoc comment. | 7 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 8 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 9 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 11 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 104). | 14 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 14 |
| Error | sizes | ParameterNumber | More than 7 parameters (found 8). | 14 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 106). | 15 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 22 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 26 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 30 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 35 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocType | Missing a Javadoc comment. | 6 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 8 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 9 |
| Error | coding | MagicNumber | '250' is a magic number. | 9 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 10 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 11 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 12 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 13 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 15 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 102). | 18 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 18 |
| Error | design | DesignForExtension | Method 'toString' is not designed for extension - needs to be abstract, final or empty. | 29 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 40 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 44 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 48 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 52 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 56 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 60 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 64 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 68 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 72 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 76 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 80 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 14 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 16 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 118). | 19 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 19 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 25 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 29 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 34 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocPackage | Missing package-info.java file. | |
| Error | javadoc | JavadocType | Missing a Javadoc comment. | 12 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 13 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 15 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 21 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 27 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 30 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 34 |
| Error | sizes | LineLength | Line is longer than 80 characters (found 102). | 35 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 38 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 48 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 58 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 73 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 88 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 103 |
| Error | javadoc | JavadocMethod | Missing a Javadoc comment. | 107 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocPackage | Missing package-info.java file. | |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 7 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 7 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocType | Missing a Javadoc comment. | 3 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 5 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 5 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 5 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 6 |
| Severity | Category | Rule | Message | Line |
|---|---|---|---|---|
| Error | javadoc | JavadocType | Missing a Javadoc comment. | 3 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |
| Error | javadoc | JavadocVariable | Missing a Javadoc comment. | 4 |


Python Quick Help¶
Sort a dict¶
sorted(dict_name, key=lambda row: (row['dob'], row['salary'], row['height']), reverse=False)
where dict_name
is name of the dictionary and sorting filter is applied on dob
, then salary
, then height
Make api calls using passphrase for PEM file with Python SSLContext¶
import requests import ssl from ssl import SSLContext import http import json context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) context.load_cert_chain(certfile="<path to pem file containing private key>",password="******") context.load_verify_locations(cafile="<path to ca certfile>") context.verify_mode = ssl.CERT_REQUIRED context.check_hostname = True connection = http.client.HTTPSConnection("www.google.com",443,context=context) connection.request("GET", "/api path/") #e.g: connection.request("GET", "/applications/") response = connection.getresponse() data = response.read().decode('utf-8') print(data) json_obj = json.loads(data) print(json_obj) connection.close()
Catch all Exceptions of a Module¶
Considering requests
as module and if we want to catch all possible exception of this module with out using broader except:
, please use below code snippet.
# This will inspect and get all members of Exception class in request module import inspect # import the module which you want to use. Example: requests import requests # Get all requests exception class from requests which are subclass of Exception exception_types = [obj for name, obj in inspect.getmembers(jsonschema.exceptions) if inspect.isclass(obj) and issubclass(obj, Exception)] try: requests.get(url) except Exception as e: if any(issubclass(e.__class__, lv) for lv in exception_types): print(str(e)) else: print("Not an requests exceptions.") raise
Fix [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (ssl.c:726)¶
Please add below to bypass
import ssl ssl._create_default_https_context = ssl._create_unverified_context
or update certifi
- In Mac, to update certifi, run below commands
[Applicable if Python was installed using official package from python.org]
/Applications/Python\ 3.6/Install\ Certificates.command /Applications/Python\ 2.7/Install\ Certificates.command


Medic
Aid
Adeeko Emmanuel
Administrator
Dashboard
Sponsors
Medical Cases
Patients
Payment
Reports
Learn more about covid-19
Switch to Dark Mode
Notifications
Dashboard
> Notifications


Benchmark info for matbench_v0.1
The matbench_v0.1
benchmark contains 13 tasks:
| Task name | Task type | Target column (unit) | Input type | Samples | MAD (regression) or Fraction True (classification) | Links | Submissions |
|---|---|---|---|---|---|---|---|
matbench_steels |
regression | yield strength (MPa) |
composition | 312 | 229.3743 | download, interactive | 5 |
matbench_jdft2d |
regression | exfoliation_en (meV/atom) |
structure | 636 | 67.2020 | download, interactive | 6 |
matbench_phonons |
regression | last phdos peak (cm^-1) |
structure | 1,265 | 323.7870 | download, interactive | 6 |
matbench_expt_gap |
regression | gap expt (eV) |
composition | 4,604 | 1.1432 | download, interactive | 5 |
matbench_dielectric |
regression | n (unitless) |
structure | 4,764 | 0.8085 | download, interactive | 6 |
matbench_expt_is_metal |
classification | is_metal |
composition | 4,921 | 0.4981 | download, interactive | 4 |
matbench_glass |
classification | gfa |
composition | 5,680 | 0.7104 | download, interactive | 4 |
matbench_log_gvrh |
regression | log10(G_VRH) (log10(GPa)) |
structure | 10,987 | 0.2931 | download, interactive | 6 |
matbench_log_kvrh |
regression | log10(K_VRH) (log10(GPa)) |
structure | 10,987 | 0.2897 | download, interactive | 6 |
matbench_perovskites |
regression | e_form (eV/unit cell) |
structure | 18,928 | 0.5660 | download, interactive | 6 |
matbench_mp_gap |
regression | gap pbe (eV) |
structure | 106,113 | 1.3271 | download, interactive | 6 |
matbench_mp_is_metal |
classification | is_metal |
structure | 106,113 | 0.4349 | download, interactive | 5 |
matbench_mp_e_form |
regression | e_form (eV/atom) |
structure | 132,752 | 1.0059 | download, interactive | 6 |


{% extends "imagina/baseplayerboard.html" %} {% block head_extra %} {% endblock head_extra%} {% block topbar %} {{ block.super }} {% if playerstate.storyteller %} This player is the storyteller {% endif %}
Your choosen card is You have voted to card {% endblock topbar %} {% block playeractions %} Waiting for other players {% endblock playeractions %}


JavaScript is disabled on your browser.
Skip navigation links
Package
Class
Tree
Deprecated
Index
Help
Prev
Next
Frames
No Frames
All Classes
A
B
C
D
E
F
H
I
N
O
P
R
S
T
U
A
appBarLayout()
- Static method in class trikita.anvil.design.
DesignDSL
appBarLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
B
baselineLayout()
- Static method in class trikita.anvil.design.
DesignDSL
baselineLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
bottomNavigationItemView()
- Static method in class trikita.anvil.design.
DesignDSL
bottomNavigationItemView(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
bottomNavigationMenuView()
- Static method in class trikita.anvil.design.
DesignDSL
bottomNavigationMenuView(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
bottomNavigationView()
- Static method in class trikita.anvil.design.
DesignDSL
bottomNavigationView(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
C
checkable(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
checkableImageButton()
- Static method in class trikita.anvil.design.
DesignDSL
checkableImageButton(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
checked(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
checkedItem(int)
- Static method in class trikita.anvil.design.
DesignDSL
collapsedTitleGravity(int)
- Static method in class trikita.anvil.design.
DesignDSL
collapsedTitleTextAppearance(int)
- Static method in class trikita.anvil.design.
DesignDSL
collapsedTitleTextColor(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
collapsedTitleTextColor(int)
- Static method in class trikita.anvil.design.
DesignDSL
collapsedTitleTypeface(Typeface)
- Static method in class trikita.anvil.design.
DesignDSL
collapsingToolbarLayout()
- Static method in class trikita.anvil.design.
DesignDSL
collapsingToolbarLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
compatElevation(float)
- Static method in class trikita.anvil.design.
DesignDSL
contentScrim(Drawable)
- Static method in class trikita.anvil.design.
DesignDSL
contentScrimColor(int)
- Static method in class trikita.anvil.design.
DesignDSL
contentScrimResource(int)
- Static method in class trikita.anvil.design.
DesignDSL
counterEnabled(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
counterMaxLength(int)
- Static method in class trikita.anvil.design.
DesignDSL
customSize(int)
- Static method in class trikita.anvil.design.
DesignDSL
D
DesignDSL
- Class in
trikita.anvil.design
DSL for creating views and settings their attributes.
DesignDSL()
- Constructor for class trikita.anvil.design.
DesignDSL
E
error(CharSequence)
- Static method in class trikita.anvil.design.
DesignDSL
errorEnabled(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
errorTextAppearance(int)
- Static method in class trikita.anvil.design.
DesignDSL
expanded(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleColor(int)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleGravity(int)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleMarginBottom(int)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleMarginEnd(int)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleMarginStart(int)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleMarginTop(int)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleTextAppearance(int)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleTextColor(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
expandedTitleTypeface(Typeface)
- Static method in class trikita.anvil.design.
DesignDSL
F
floatingActionButton()
- Static method in class trikita.anvil.design.
DesignDSL
floatingActionButton(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
foregroundLinearLayout()
- Static method in class trikita.anvil.design.
DesignDSL
foregroundLinearLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
H
hint(CharSequence)
- Static method in class trikita.anvil.design.
DesignDSL
hintAnimationEnabled(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
hintEnabled(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
hintTextAppearance(int)
- Static method in class trikita.anvil.design.
DesignDSL
I
icon(Drawable)
- Static method in class trikita.anvil.design.
DesignDSL
iconTintList(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
itemBackground(Drawable)
- Static method in class trikita.anvil.design.
DesignDSL
itemBackground(int)
- Static method in class trikita.anvil.design.
DesignDSL
itemBackgroundRes(int)
- Static method in class trikita.anvil.design.
DesignDSL
itemBackgroundResource(int)
- Static method in class trikita.anvil.design.
DesignDSL
itemIconTintList(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
itemPosition(int)
- Static method in class trikita.anvil.design.
DesignDSL
itemTextAppearance(int)
- Static method in class trikita.anvil.design.
DesignDSL
itemTextColor(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
N
navigationItemSelectedListener(NavigationView.OnNavigationItemSelectedListener)
- Static method in class trikita.anvil.design.
DesignDSL
navigationMenuItemView()
- Static method in class trikita.anvil.design.
DesignDSL
navigationMenuItemView(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
navigationMenuView()
- Static method in class trikita.anvil.design.
DesignDSL
navigationMenuView(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
navigationView()
- Static method in class trikita.anvil.design.
DesignDSL
navigationView(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
needsEmptyIcon(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
O
onNavigationItemReselected(BottomNavigationView.OnNavigationItemReselectedListener)
- Static method in class trikita.anvil.design.
DesignDSL
onNavigationItemSelected(BottomNavigationView.OnNavigationItemSelectedListener)
- Static method in class trikita.anvil.design.
DesignDSL
P
passwordVisibilityToggleContentDescription(int)
- Static method in class trikita.anvil.design.
DesignDSL
passwordVisibilityToggleContentDescription(CharSequence)
- Static method in class trikita.anvil.design.
DesignDSL
passwordVisibilityToggleDrawable(Drawable)
- Static method in class trikita.anvil.design.
DesignDSL
passwordVisibilityToggleDrawable(int)
- Static method in class trikita.anvil.design.
DesignDSL
passwordVisibilityToggleEnabled(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
passwordVisibilityToggleTintList(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
passwordVisibilityToggleTintMode(PorterDuff.Mode)
- Static method in class trikita.anvil.design.
DesignDSL
presenter(BottomNavigationPresenter)
- Static method in class trikita.anvil.design.
DesignDSL
R
rippleColor(int)
- Static method in class trikita.anvil.design.
DesignDSL
S
scrimAnimationDuration(long)
- Static method in class trikita.anvil.design.
DesignDSL
scrimInsetsFrameLayout()
- Static method in class trikita.anvil.design.
DesignDSL
scrimInsetsFrameLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
scrimsShown(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
scrimVisibleHeightTrigger(int)
- Static method in class trikita.anvil.design.
DesignDSL
selectedItemId(int)
- Static method in class trikita.anvil.design.
DesignDSL
selectedTabIndicatorColor(int)
- Static method in class trikita.anvil.design.
DesignDSL
selectedTabIndicatorHeight(int)
- Static method in class trikita.anvil.design.
DesignDSL
set(View, String, Object, Object)
- Method in class trikita.anvil.design.
DesignDSL
shiftingMode(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
size(int)
- Static method in class trikita.anvil.design.
DesignDSL
snackbarContentLayout()
- Static method in class trikita.anvil.design.
DesignDSL
snackbarContentLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
statusBarScrim(Drawable)
- Static method in class trikita.anvil.design.
DesignDSL
statusBarScrimColor(int)
- Static method in class trikita.anvil.design.
DesignDSL
statusBarScrimResource(int)
- Static method in class trikita.anvil.design.
DesignDSL
T
tabGravity(int)
- Static method in class trikita.anvil.design.
DesignDSL
tabItem()
- Static method in class trikita.anvil.design.
DesignDSL
tabItem(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
tabLayout()
- Static method in class trikita.anvil.design.
DesignDSL
tabLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
tabMode(int)
- Static method in class trikita.anvil.design.
DesignDSL
tabTextColors(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
textAppearance(int)
- Static method in class trikita.anvil.design.
DesignDSL
textColor(ColorStateList)
- Static method in class trikita.anvil.design.
DesignDSL
textInputEditText()
- Static method in class trikita.anvil.design.
DesignDSL
textInputEditText(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
textInputLayout()
- Static method in class trikita.anvil.design.
DesignDSL
textInputLayout(Anvil.Renderable)
- Static method in class trikita.anvil.design.
DesignDSL
title(CharSequence)
- Static method in class trikita.anvil.design.
DesignDSL
titleEnabled(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
trikita.anvil.design
- package trikita.anvil.design
typeface(Typeface)
- Static method in class trikita.anvil.design.
DesignDSL
U
upWithViewPager(ViewPager)
- Static method in class trikita.anvil.design.
DesignDSL
useCompatPadding(boolean)
- Static method in class trikita.anvil.design.
DesignDSL
A
B
C
D
E
F
H
I
N
O
P
R
S
T
U
Skip navigation links
Package
Class
Tree
Deprecated
Index
Help
Prev
Next
Frames
No Frames
All Classes


Ordered List
- Item 1
- Item 2
- Item 3
Ordered List dengan atribut huruf
- Item 1
- Item 2
- Item 3
Unordered List
Unordered List dengn type square
Definition List
- Term 1
- Description Term 1
- Term 2
- Description Term 2
Contoh Definition List
- What is Lorem Ipsum?
- Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a
type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages,
and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Hyperlink


Computer science department was started in Manav Rachna University in 1997. .The computer science is the future of the world and thus has enormus career oppurtunities in it namely web devlopment,app development,cyber security and much more.HOD of CSE department is Ms. Hanu Bhardwaj.The course curriculum has been specially tailored to fulfill the growing global outlook and focuses on upcoming technologies in the field of Computer Science and Engineering, to cater to the needs of the industry and R&D organizations.
Welcome to MRU!!


| 8:15AM | Registration Doors Open |
| 9:00AM - 9:05AM | Welcome |
| 9:05AM - 10:00AM | James Randi - Welcome and Audience Q&A (remotely appearing via Skype, with filmmakers Tyler Measom & Justin Weinstein) |
| 10:00AM - 11:00AM | Eugenie C. Scott - Legends, Hoaxes, Frauds, and "Frauds" of Science |
| 11:00AM – 11:15AM | Break |
| 11:15AM – 12:15PM | Breakout Sessions: |
| Room 1: D.J. Grothe - Grassroots Skepticism |
| Room 2: Julia Galef - Workshop: Thought Experiments |
| 12:15PM – 1:30PM | Lunch Break (buy on-site lunch tickets) |
| 1:30PM – 2:30PM | Jill Tarter - SETI In An Age of UFOs: What Constitutes Extraordinary Evidence? |
| 2:30PM – 2:45PM | Break |
| 2:45PM – 3:45PM | Breakout Sessions: |
| Room 1: Laurie Issel-Tarver - Who Owns Your Body? Henrietta Lacks, Myriad Genetics, and the Future of Medical Ethics |
| Room 2: Leonard Tramiel, Jerry Schwartz, and Jay Diamond - Lessons Learned from a Paranormal Investigation |
| 4:00PM – 4:30PM | SkeptiCal Experiment (I.C.E.) Discussion |
| 4:30PM – 5:30PM | Anthony Pratkanis - Weapons of Fraud |
| 5:30PM – 6:00PM | Ryan Kane - Magic Show |
| 6:00PM - 6:05PM | Wrap Up |


DRESSES
RENTED DRESSES
List of rents
Add
Show data from:
to:
Refresh
Rents
from:
to:
×
Date from cannot be after date to!
All rents are shown.


File Metadata Microservice
I can submit a FormData object that includes a file upload.
When I submit something, I will receive the file size in bytes within the JSON response.
Usage
http://www.tosp.net.au:3003/
File Upload
Select File
Upload


decomposition and synthesis
- Code smells Jeff Atwood.
- Summary
http://c2.com/cgi/wiki?RefactoringImprovingTheDesignOfExistingCode
http://en.wikipedia.org/wiki/Code_refactoring
- etymology of refactoring
- The obvious answer comes from the notion of factoring in mathematics. You can take an expressions such as x2 + 5x + 6 and factor it into (x+2)(x+3). By factoring it you can make a number of mathematical operations much easier. Obviously this is much the same as representing 18 as 2*32.
improve internal structure, but don’t change the external behavior
list of refactors - slide 7 in http://www.slideshare.net/MarcusDenker/refactoring-1921411
code is written once, but read many times.
-
- Spaghetti code is a pejorative term for source code that has a complex and tangled control structure. It is named such because program flow tends to look like a bowl of spaghetti, i.e. twisted and tangled.
Duplicated Code
- long method
- large class
- long parameter list
temporary variable assigned more than once, but not a loop or collection
-
- push logic to the model -> conditional logic belongs in the model
- we’re going to push the nastiness down into the model. That way it can be tested and, so we can more easily change it in the future.
when you refactor, the first test is always create tests
good quotes http://www.slideshare.net/hominhchuc/refactoring-your-code-key-step-to-agility-presentation
Martin Fowler : “a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior“.
William C. Wake : “Refactoring is the art of safely improving the design of existing code“.
The goal of refactoring is NOT to add new functionality. The goal is refactoring is to make code easier to maintain in the future. The process of refactoring involves the removal of duplication, the simplification of complex logic, and the clarification of unclear code.
refactoring versus rewriting
lego versus playdoh slide 9 http://www.slideshare.net/NeilGreen1/the-roi-of-refactoring-lego-vs-playdoh
Everything I need to know about refactoring I learned in kindergarden
“I’m not a great programmer; I’m just a good programmer with great habits.”- Kent Beck
Law of demeter?
Get into this?
E.g.s
- Inline class- http://www.refactoring.com/catalog/inlineClass.html
- Decompost conditional- http://www.refactoring.com/catalog/decomposeConditional.html
- Extract Class - http://www.refactoring.com/catalog/extractClass.html
- Inline Method
- Replace Conditional with Polymorphism
Replace Parameter with Method
God class
http://www.refactoring.com/catalog/
Code smells
http://en.wikipedia.org/wiki/Code_smell
extraction pattern- anti-pattern: http://blog.jayfields.com/2007/04/ruby-anti-pattern-extract-module-to.html
Refactoring: Even noobs know that refactoring is important. This presentation, inspired by Refactoring: Ruby Edition, will cover the whys, whens, and hows of refactoring using examples.


Sunday Morning Fever? California toddlers hit the dance floor at Baby Rave
OAKLAND, Dec 9 — The dance floor is packed, the disco lights are flashing and the DJ is spinning R&B and pop beats.
But this is no sweaty, late-night club. It’s 10 a.m. on a Sunday; the only drinks are in sippy cups, and the energetic dancers have to leave before nap time.
This is Baby Rave, a monthly high-octane dance party for under 4-year-olds in Oakland, California.
“The idea of Baby Rave is an opportunity for parents to just have fun with their toddlers,” says organiser Nina Meehan, executive director of Bay Area Children’s Theatre, where the rave is held.
Meehan came up with the idea in 2016, after seeing a similar dance party for tots during a trip to Atlanta. She roped in her friend, DJ E.T. Hazzard and started running the baby bash.
What sets Baby Rave apart from other toddler activities is that it doesn’t try to offer an educationally enriching experience.
“We just want you guys to have fun on a Sunday morning. And that’s it,” Hazzard said.
Hazzard, whose 20-month-old daughter Daphne is among the tiny clubgoers, describes the music selection as “non-stop dance party.” But you won’t find any children’s songs, like the global phenomenon Baby Shark, anywhere on his playlist. The music, he says, is geared towards the parents.
“Being a new parent myself, it’s like, we don’t get to go out and dance that much any more,” he says. “We used to go out and party, and we can do it now on a Sunday morning. Why not?”
The mini ravers and their parents dress up in sparkly top hats and oversized neon sunglasses, and wave brightly colored ribbon wands as they get down to the steady stream of dance hits.
Salvador Ramos has been bringing his 2-year-old daughter Lucia to the rave since she was six months old.
“She loves it. We have a lot of fun,” he says. “Just bouncing around, getting out on the weekend, seeing other parents and just enjoying the vibe.”
Entry to Baby Rave is US$7 (RM29) for adults and children over the age of one. “Babies under 1 rave for free,” the organisation’s website says.
The raves are currently sold out through April 2020. — Reuters


Copyright (c) 2002 Walter Joris
This game is played at a 10x10 square board.
|
| An example
The black stone may jump to cell [1] and then to [2].  In this position, White cannot make any jump, so he must drop an operator. |
This game can be player with just pencil and paper. It is presented at 100 Strategic Games for Pen and Paper by Walter Joris.


{% extends "base.html" %} {% load static %} {% block sidebar %} {% include 'components/hackathon-sidebar.html' %} {% endblock %} {% block content %} {% include 'components/hackathon-header.html' %}
You can't make it to Hack for the Sea this year. We're guessing you're not very happy about that, but don't worry - you can still do something to help. There are folks out there who can make the event, but for one reason or another can't afford it: Help sponsor their tickets.
Simply going to the EventBrite page and donate $25 per ticket. By doing so you can enable our ocean hacker community to take on the most important challenges that exist today in marine science, research, conservation, and industry. The ocean is life and livelihood and you — from your laptop or phone — can catalzye change.
{% endblock %} {% block extrascripts %} {% endblock %}


core / com.mo.stratego.model.player / PlayerProxy / processOthersStartingNumber
processOthersStartingNumber
fun processOthersStartingNumber(: StartNumber): Unit
Sends the starting number to the connected device.
Parameters
number
- Other players starting number


A responsive site is one that while alter the orientation of it's content to fit the resolution of the screen of which it is being viewed. Such as phones, tablets and PCs. Otherwise a site built purely for pc may have an unfriendly experience for mobile users.
What mobile first design is, and why it's important?It is the process of designing the layout of your site for the needs of a mobile user 1st. It is much easier to have a small amount of content and then move into a larger resolution, rather than a large amount of content and then move into a smaller resolution.
What frameworks are, and their pros and cons?Frameworks are pre-made code templates which can help devs create a functioning page in a fraction of the time. The draw back is that there may be a lot of unwanted code within the framework that needs to be deleted.
 Where you intend your boxes to be placed and how they will be moved around for different resolutions. By doing this you can save considerable time from moving around your code to get the layout you want.
Examples: What aspects of your wireframes you found difficult to implement, and why?
My main difficulties was getting boxes to sit how I wanted them to. I kept getting some that would be in the row how I intended but then some parts would go underneath inthe column. Finally realised I needed to set my margins at 0px as they were making my content too large to fit in the row.


Today we are announcing a new major version of Jest which refines almost
all parts of Jest to provide a more solid testing foundation. Together
with the Jest community we made a number of changes across the board that
will help you get more out of Jest. We are also graduating the custom
runners feature out of the experimental stage and added a new package,
jest-worker
, for parallelizing work across multiple
processes. We have compiled a list of highlights below but make sure to
check out the (as always)
massive changelog.
With this release we are dropping support for Node 4, mainly because one
of our main dependencies, JSDOM, ended their support. Jest now comes out
of the box with JSDOM 11 which features better support for SVGs,
requestAnimationFrame
, URL
and
URLSearchParams
built in, and
much more.
jest-worker
In Jest 21 we introduced the concept of custom Jest runners. Since then, Rogelio, one of Jest’s core contributors, built a number of useful runners: If you have many existing tests written using another framework but you’d like to immediately benefit from Jest’s features, check out jest-runner-mocha. If you have a large codebase that needs linting, you may get a significant speedup if you run eslint within Jest using jest-runner-eslint.
To gain more of fine-grained control over heavy tasks parallelization
(e.g. transforming files or crawling the file system), we designed a new
library perfectly suited for the job. We developed a modern, Promise-based
module with an approachable API, called jest-worker
, that
allows you to delegate to child processes those intensive functions. As
jest-worker
, like any other Jest package, is a part of the
Jest platform, you can use it however you like even without ever using
Jest itself. You’ll find more in the documentation
here.
To get a better understanding of custom runners and Jest as a platform, make sure to check out Rogelio’s talk from Reactive Conf 2017: Jest as a Platform.
In order to more easily identify which assertion is failing your test, we’ve added a code frame showing the context where the assertion is in order to focus on your own code. See the following example test:
test('some test', () => {
function someFunctionWhichShouldThrow() {
if (false) {
throw new Error();
}
return 'success!';
}
expect(someFunctionWhichShouldThrow).toThrowError();
});
In Jest 21, we would display the following error:
In Jest 22, we have added a codeframe, giving more context to the failing assertions. We have also cleaned up the stack trace to remove more clutter than ever.
You can now use toThrow
and
toThrowErrorMatchingSnapshot
on promise rejections in the
same way you can on synchronous errors.
async function throwingFunction() {
throw new Error('This failed');
}
test('asynchronous rejection', async () => {
await expect(throwingFunction()).rejects.toThrowErrorMatchingSnapshot();
});
When Puppeteer, a way of programmatically interacting with a real Chromium Browser, was announced by the Google Chrome team in August, many wanted to be able to use Jest to write their tests running them in Chrome. The community have helped us out making this possible by allowing asynchronous test environments. We are still working on making this experience as good as possible, but please see this guide for how to use Puppeteer with Jest, starting today.
We added an experimental --detectLeaks
setting to Jest that
will let you know if your internal environment instance is leaked after a
test execution. It will also warn you when your test suite tries to
require a file after the test has finished, meaning you forgot to wait for
all async operations or left something not properly cleaned. This will
however not discover leaks in user land code, only in test land code;
although the technology used behind it can help you (see
jest-leak-detector
). If you are reporting a bug about Jest’s
memory usage, please provide a repro where --detectLeaks
will
make the test suite fail. We
started building a better sandboxing mechanism
for Jest but it’s not ready yet to be enabled by default. If you’d like to
help, please reach out to us on discord!
When using watch mode, there is now a way to
focus only on tests that previously failed. In this mode, Jest will not re-run previously passing tests which
should help you iron out all test failures. Additionally,
we added a plugin system to watch mode. By adding modules to watchPlugins
in your configuration
you can extend the features of the watch mode.
Jest uses Babel under the hood to power code coverage and advanced mocking features. With Jest 22, it also supports the upcoming Babel 7. You’ll find more in the documentation here.
There has been a couple of changes to mock functions in Jest 22, making
them even easier to use. Firstly, we added a
mockName
property allowing you to name your mocks, which is useful in assertion
failures. We have also made the Jest mock function serializable in
pretty-format
, meaning that you can snapshot test mocks. In
Jest 21, expect(jest.fn()).toMatchSnapshot()
would serialize
to [Function]
, in Jest 22, you might get something like this:
test('my mocking test', () => {
const mock = jest.fn().mockName('myMock');
mock('hello', { foo: 'bar' });
expect(mock).toMatchSnapshot();
});
// Serializes to:
[MockFunction myMock] {
"calls": Array [
Array [
"hello",
Object {
"foo": "bar",
},
],
],
}
Jest 21 was released back in September, and we unfortunately never got around to write a blog post. So here is a quick summary of the main changes in version 21:
expect
package to the Jest project. As part of that transition, the Jest core
team, with much help from
Kenneth Skovhus, made both
jest-matchers
(renamed to expect
) and
jest-mock
work in browsers. This means that while you
cannot use Jest itself in browsers (yet), you can use its awesome assertions and mocks for instance as
replacements for Chai and Sinon running in Mocha tests. If you are
migrating from earlier expect
to the new Jest-powered
expect
, you can use
jest-codemods
to automate the migration.
The community around Jest is working hard to make the testing experience even greater. These are separate projects from the main Jest project, but we want to highlight some of our personal favorites here.
We’d also like to announce that recently we launched a new place for high quality Jest additions – jest-community. It’s a new GitHub organization already featuring our favorite projects, like vscode-jest, jest-extended, to name a few, curated by Jest maintainers and collaborators. We’ve even migrated our eslint-plugin-jest there, and already see some great contributions, which are published independently at a faster pace.
Community projects under one organisation are also a great way for us to experiment on things like automated releases, which we’d like to explore for Jest as well. They also enable us to share some common things between them, like the shape of the README for example (thanks to the webpack Community for the idea), making it easier to learn and use for all of us.
If you have something awesome to share, feel free to reach out to us! We’d love to share your project here.


Publication & Patent
-
Jaeseung Lee, Seongjoon Park, Hwangnam Kim, DAG-based Adaptive Distributed Ledger System for Real-Time Transactions in Smart Grid, Under review
-
Seongjoon Park, Jaeseung Lee, and Hwangnam Kim. "Efficient computation offloading for ethereum DApps." Journal of Industrial Information Integration 31 (2023): 100411
-
Seongjoon Park, Jaeseung Lee, Namkyung Yoon, "METHOD OF REDUCING SMART CONTRACT FEE OF DAPP," , 10-2021-0141288 KR, IP-2022-0002-US 17/668,748
-
Jaeseung Lee, Byungheon Lee, Jaeyoung Jung, Hojun Shim, Hwangnam Kim, "DQ: Two approaches to measure the degree of decentralization of blockchain," ICT Express, August 2021
-
Jaeseung Lee, Seongjoon Park, and Hwangnam Kim, "Expulsing UAV’s Core-System in Emergency Circumstances ," ICNGC, Busan, Korea, December 2020
-
Donggyu Sung*, Eunhak Koh*, Yonghyeon Nam*, Jaeseung Lee*, Chanbin Lee*, Yeongbae Jeon*, Cheolkyun Choi, Jaewoo Lee, Flying-wing Type Compound Drone Design and Mission Accuracy Analysis. J. Korean Soc. Aviat. Aeronaut. 2018;26(4):122-128
-
COSMonaut, Interactive CosmWasm Learning Platform, D3LAB-DAO, 06/2022 ~ 12/2022
-
The Ultimate Lending Protocol, BokLee, Decipher, 11/2021 ~ 01/2022
-
Trusty-based Network Routing Protocol for Blockchain, IITP, 08/2021 ~ 12/2021
-
AMI-based Energy Trading Platform using Smart Contracts, Ethereum Hackathon, 08/2021
-
A integrated platform to help deal with malicious comments, NedX, 07/2021 ~ 09/2021
-
DAG-based Distributed Ledger for Smart Grid, KETEP, 11/2020 ~ 12/2021
-
The Degree of Decentralization of Blockchain, Decipher, 09/2020 ~ 12/2020
-
Intelligent anti-drone system based on broadband drone surveillance, tracking and neutralization, NRF, 08/2020 ~ 10/2021
-
Hijack a Drone by overriding info received from RC radio in ad-hoc network,
04/2019 ~ 05/2019
-
Implementation of Electronic Equipment Ejection System for UAV using
Embedded system (Dream project), 06/2018 ~ 01/2019
-
Design Unmanned Hybrid drone using Pixhawk(Automatic Flying with waypoint),
03/2018 ~ 12/2018
-
Implementation of Automatic Window Moving System Algorithm according to
External Environment Changes, 08/2017 ~ 12/2017
-
Design combined wheelchair electric module to replace expensive electric
wheelchair (Samsung Tomorrow Solutions Top 100), 03/2017 ~ 11/2017
-
Boxed-Wing airplane design for Induced drag attenuation, 03/2016 ~ 08/2016
-
Intermeshing-Rotor Helicopter Control using Hexa-Copter controller, 03/2016
~ 11/2016
-
Designed wing-length adjustable airplane according to airplane situation,
03/2013 ~ 09/2013
Work Experience
D3LAB DAO Contributor, 02/14/2022 ~ present
- Various technical contributions to the blockchain ecosystem
LINE Full-time worker, 01/03/2022 ~ present
- Design & Manage LINE Blockchain Mainnet (LBM) technically
- Develop the LBM and its corresponding ecosystem
- Research various fields of Blockchain
Decipher Mentor, 03/2022 ~ present
- Research on blockchain and related topics Senior researcher, 09/2020 ~ 02/2022
Hanbit Publishing Network Technical Book Reviewer, 04/2021 ~ present
CURG Researcher, 10/2021 ~ 04/2022
- Review research papers related to Blockchain
MVLChain Outsourcing, 11/25/2021 ~ 12/22/2021
- Backend server development (Node.js)
- Smart contract development (Ethereum)
Kakao Krust Commissioned research, 11/22/2021 ~ 12/16/2021
- Research P2E and Web3 game
ZK-SEL 0x06 STARK and StarkNet (by StarkWare), 08/31/2021
Korea University TA, 09/2020 ~ 12/2020
- Digital System Experiment(KECE210) teaching assistant
Hyundai Motor Company Engineer, 07/2018 ~ 09/2018
- Design vehicle using CATIA
Republic of Korea Army Server Operator(Signal Corps),
01/2014 ~ 10/2016
- Server Maintenance
- Computer & Communications equipment Repair
- Network Security Monitoring
Helius UAV Designer,
03/2013 ~ 02/2017
- Design Fixed-wing Aircraft & Multi-rotor Drone
- Design security drone system
- Design and manufacture of small unmanned aerial vehicle systems
- UAV Stability Analysis and Control
Education
Korea University, Seoul
Master of Electrical and Computer Engineering
Konkuk University, Seoul
Bachelor of Mechanical and Aerospace Engineering
Honors and Awards
- 2022 HackAtom, 1st prize (Winner), $50k
- 2021 Tendermint(Confio) Riddleton, $1.1k
- Dean's list, Konkuk University, 2018
-
3rd Award in Creative self-directed Project Competition(Dream Project),
2018
- Encouragement Award in KU Capstone Design Competition, 2017
- Special Award in National Capstone Design Competition, 2016
- Encouragement Award in KU Capstone Design Competition, 2016
- 27th Division Security Audit Commendation, 2015
-
블록체인 실무응용 1 / 2, Seoul National University
-
Machine learning by Andrew Ng
-
Reinforcement learning by David Silver
-
Sensor Engineering by Inkyu Park


Let's get one thing clear first. Running native code is much faster than running PHP code. So, once your C++ function or your C++ method finally gets called, you normally cast the parameters to native variables, and you start running your own fast algorithm. And you don't want to call other PHP functions from that moment on.
If, however, you would like to make a call to a PHP function - whether that is a function that is built-in in the Zend engine, that is defined in an extension, or even a function that comes from PHP user space - you can do so.
#include <phpcpp.h>
#include <iostream>
/**
* Native function that is callable from PHP
*
* This function gets two parameters: an associative array and a callback.
* It does not do anything meaningful, it is just a demonstration function.
*
* @param params The parameters passed to the function
*/
void example_function(Php::Parameters ¶ms)
{
// first parameter is an array
Php::Value array = params[0];
// call the PHP array_keys() function to get the parameter keys
std::vector<std::string> keys = Php::array_keys(array);
// loop through the keys
for (auto &key : keys)
{
// output key
Php::out << "key: " << key << std::endl;
}
// call a function from user space
Php::Value data = Php::call("some_function", "some_parameter");
// create an object (this will also call __construct())
Php::Object time("DateTime", "now");
// call a method on the datetime object
Php::out << time.call("format", "Y-m-d H:i:s") << std::endl;
// second parameter is a callback function
Php::Value callback = params[1];
// call the callback function
callback("some","parameter");
// in PHP it is possible to create an array with two parameters, the first
// parameter being an object, and the second parameter should be the name
// of the method, we can do that in PHP-CPP too
Php::Array time_format({time, "format"});
// call the method that is stored in the array
Php::out << time_format("Y-m-d H:i:s") << std::endl;
}
/**
* Switch to C context, because the Zend engine expects get get_module()
* to have a C style function signature
*/
extern "C" {
/**
* Startup function that is automatically called by the Zend engine
* when PHP starts, and that should return the extension details
* @return void*
*/
PHPCPP_EXPORT void *get_module()
{
// the extension object
static Php::Extension extension("my_extension", "1.0");
// add the example function so that it can be called from PHP scripts
extension.add("example_function", example_function);
// return the extension details
return extension;
}
}
In above example you can see quite some different ways to call PHP functions from C++. The first one is the call to Php::array_keys(). The PHP-CPP internally has a long list of all important PHP functions, and you can call these functions directly from your extension. Php::array_keys() is one of them.
Many of the built-in function functions (like Php::array_keys()) return a Php::Value object. In the example however, you saw that we assigned the return value directly to a std::vector. This works because the Php::Value object has an implicit casting operator to automatically transform the object to a vector.
Not every PHP function can of course be called like the built-in functions can. User space functions, or functions from optional PHP extensions are not automatically forwarded by the PHP-CPP library. Such functions can still be called by using the Php::call() function. You must supply the name of the function to call, and an optional list of arguments.
The Php::Object class (which is derived from Php::Value) can be used to create objects, and implicitly call the __construct() method. To call a method on an object, you can use the Php::Value::call() method, which is used in the example to call the PHP method DateTime::format().
In PHP scripts you can create an array with two members: an object and the name of a method. This array can then be used as if it was a regular function. You can do similar things in C++, as we showed in the example with the "time_format" variable.
The following script runs the example.
<?php
// define a user space function
function some_function($param)
{
echo("userspace function called with $param\n");
}
// example input
$input = array(
'x' => 10,
'y' => 20,
'z' => 30
);
example_function($input, function($param1, $param2) {
echo("lambda function called with param $param1 $param2\n");
});
?>
This above script will generate output similar to this:
key: x key: y key: z userspace function called with some_parameter 2014-03-08 13:55:54 lambda function called with param some parameter 2014-03-08 13:55:54
If you call a function or a method that does not exist, a Php::Exception will be thrown. If you do not catch this exception in your C++ code, it will bubble up and appear in PHP user space.


Management Table
Type something in the input field to search the table:
Item
Cost
Display
Large Pizza
24.99
Medium Pizza
18.99
Small Pizza
12.99
Margarita
8.99
Management use only.


An application's first package must be an 'install' package. This is the package that injects a new application into the system. Only Application packages can be set on this level. An install level package must contain a new application identifier that is unknown to the system. Packages on this level can be executed only once.
Contains small modifications (e.g. a couple of new content to import or a bugfix in a dll). Usually patches form a chain where every package assumes the existence of all the previous ones but it is not mandatory. It is possible to control this behavior, see version control below.
Can contain small repeatable activities that do not perform significant changes but can be important because of business or technical reasons. A good example is performing an undo checkout on multiple content. Executing a package of this level does not change the application's or the product's version number but the execution is logged and registered
Generated using TypeDoc
The type of a specific package