#3
I work with tropical fish, and I have particular interest in fish diseases. Tetrahymena is the one I'm currently researching. It's a minefield, but I'm getting there.
RIP Tom Searle.
#6
Reporting requirements/ on-and-off-the-balance sheet reporting for consolidated financial statements of different % ownerships and the different types of structures they can take among parent/subsidiary companies and Variable Interest Entities. You walk out of that class thinking damn, everything's connected and woah
.
#7
not a physicist prodigy by any means, but i can talk thoroughly about star systems and interstellar galaxies and how carbon-nitrogen bonds occur and effect regions of space, black holes etc

Anything related to Astronomy or Paleontology, ancient earth life, gets me deeply focused
Quote by jrcsgtpeppers
There shall be a stop to this madness. The battle is not over. My tasty licks aren't going anywhere.

Quote by The_Blode
^ I've just realised if you say Simple Plan's 2011 effort "Get Your Heart On!" really fast in a Southern American accent, it sounds gross. . .like sexual gross!

Quote by Necroheadbanger
Hello.
I'm looking for professional bongo-ists and triangle-ists to make a Progressive Technical Brutal Death Metal band
(will be called AxOxJxLxAxIxVxXxUxWxZxQxUxRxWxGxJxSxAxLxKxMxNxHxUxGxAxAxWxVxCxBxZxVx)
(Don't even ask what it means)


https://soundcloud.com/95dank



#10
@k.lainad, I took an Archaeoastronomy class that was pretty cool, and we made an astrolabe for a group project, but I forgot everything about it
.
#11
Russell's paradox. Google it. Makes my students squirm trying to understand it.
#16
the acquisition of syntactic knowledge in children and 2nd language learners, and the relationships between bilingualism and articulation
cat
#17
Quote by MeGaDeth2314
none of you are explaining these in depth like TS asked.


i wanna hear some crazy shit, yo


ok imagine there's this machine

you put stuff in like some hole in the side or something and then it spits out kinda different stuff

there was a swiss dude who lived like a hundo years before you, right, he discovered that there's a connection between this machine and some of the most fundamental problems in mathematics

you, a poor & chronically ill german man, figure there must be more to this machine than meets the eye. the problem, you think, is that the hole in the side is too small. you wanna shove some big important stuff in there (your dick) but it won't work.

so you expand the machine. the process is so complicated that you can hardly explain it to your colleagues. you write down some of the stuff you found but basically no one understands it until a few decades later. you pose a few questions you couldn't figure out then die.

150 years later everyone is pretty confused by the machine still. lots of people understand the work you did now and they've tried to continue it but they can't answer the questions you left behind. they use your hole expanding techniques ( ) to revolutionize entire areas of mathematics and also discover important shit about the universe and what have you

some people offer a million big ones to the person that answers the questions. so far no one does
#18
Quote by MeGaDeth2314
none of you are explaining these in depth like TS asked.


i wanna hear some crazy shit, yo
yeah i mean write me up an entire report. i want to be as educated in the subject as you are by the time i am done reading your post. no casuals allowed.
#19
Most complex thing I know: Submitting this post to UG

First of all, you are in your browser and hit the "Submit Reply" button. The browser then figures out where the mouse clicked, and goes to his collection of DOM elements to see which one was affected, based on how they were rendered on the screen and the position of the mouse. After finding the DOM element, the browser finds it's an <input> element of type "submit". After this, it finds the corresponding <form> element, finds its "onsubmit" attribute, takes the string it has, and evaluates it as Javascript. After evaluation, it return a value. If the value is the boolean "true", it continues and finds the "action" attribute. Having the action, and the relative path to the current page (which it stores in global state in memory), it fuses them into the URL it's going to post the form.
It also searches the children of the <form> DOM element, finding any element that's an <input>, and it saves their "name" and "value" values in a map for them to be sent in a POST message.
At this point, the browser also most likely has other configurations it needs to search for, but in the end it has a URL, a key-value map representing the information of the form (including the post I'm writing right now), and other info necessary to make an HTTP POST request to UG.

But wait, it's not over. The browser is implemented in a specific programming language, and has specific bindings to binaries of libraries other people have made most likely, or binaries they made themselves. At execution time, these binaries are stored on memory/RAM, which the CPU is able to access.
First of all, the browser needs an instruction, written in 0s and 1s, to be able to decide what to do. This instruction is fetched by the CPU from RAM (or the cache), and is fed through a complex process of circuits, boolean gates, and flip-flops/little memory cells called register which allow the CPU to momentarily hold a 0 or a 1 in each of them. The instruction is fed via electricity to these circuits, which have to interpret the instruction they are given as an algebraic formula, since they only have 0s and 1s to manipulate, but abstractly have to "execute" an instruction. This is usually done in the ALU (Arithmetic Logical Unit) in the CPU, which takes 2 entries of 8-bit values of 0s and 1s (connected to the ALU by wires, etc) and perform arithmetic operations to it, like shifting bits, adding them together, substracting them, etc. The result of these get passed to the rest of the circuits, with some values stored in some registers, some flags being reset or not, etc, depending on the instruction.
Some of these instructions tell the CPU to move values into addresses in memory, or get values from the memory into the register (to do more stuff to it and ideally move new values into other memory addresses). These addresses are usually 32bit or 64bit long and reside in the RAM, which is basically an enormous grid of memory cells (little cells that can store the state of an electric value, either a 0 or a 1). When you have 32 of them in a row you have a single memory address 32 bits long. Some of these addresses contain values, some of them contain other instructions. How does the CPU know which ones are instructions and which ones values? Normally the values are given by other instructions themselves. Some instructions are of the sort "Move value 0xF4 to address 0x22FD".
The instructions are usually placed one next to the other in memory addresses. So if memorry address 0x3FA2 has an instruction, so does 0x3FA3. There are specific instructions though that tell the CPU to take a completely different address as the next instruction (usually called something like "JUMP").
Some of these instructions also need access to external devices, like the network, the disk, etc. These devices are connected to the CPU via busses (basically wires), which the CPU can access and send signals too. Each of these devices interprets these signals in different ways. A printer for instance could receive a 32 bit value, an interpret it as an instruction that says "Put letter 'a' into the printing queue". The CPU communicates with the "outside world" via these instructions and these busses.

So anyways, we know how the browser can execute instructions to be able to send the HTTP POST to UG. What does it do now? Well, on its own the browser can't do much. It needs to rely on previously designed and implemented functions (in the language the browser has been written) that can do this for him. One of these functions could be a "Post" function, that receives the necessary information from the HTTP protocol and sends the information to UG.
The information needed is a sequence of characters that conform to the HTTP protocol. It needs the method "POST", followed by the relative URL of the resource it identifies, followed by the version of the HTTP protocol. Then it needs the host of the remote PC to post the info. An example would be "POST /newreply.php HTTP/1.1 Host: www.ultimate-guitar.com". Then it needs to put the additional HTTP headers needed (for authentication, cookies, etc). One in particular is a header called "Content-Type" which tells the server how to interpret the information sent in the HTTP request. In this particular case, I think the content type would be "application/x-www-form-urlencoded". This tells the server that the body of the request will be filled with key-value pairs, where the pairs are separated by the character '&', and the keys and values separated by '='. The body of the request appears after all the headers were set.

After creating this HTTP request, it needs to figure out where to send it. Which of the million servers in the world should this request be sent to? We only have the host "www.ultimate-guitar.com" right now. What is done now is follow the DNS system to find out the IP of UG's server.
The process needs to query the current OS for the location of its local name server. Every OS has, in some file somewhere, a place that states the IP of the name server assigned to its network. Knowing its IP, then the process can send a packet to it asking for the IP of "www.ultimate-guitar.com". This packet travels the network and goes to this name server. DNS works in a hierarchical way, if the local name server doesn't have any info about UG, it asks its "parent" by sending another packet over the network with the same question. If that other name server doesn't know, it keeps doing this, until it reaches a "root" name server. This root name server knows about how the host is constructed. If it ends with ".com" it knows that name server X1 will have the answer. If it ends with ".org" it knows name server X2 will have the answer. After sending the query to name server X1, it knows about the "ultimate-guitar" domain, and gives you the info about the name server Y1 that knows about it. You then ask name server Y1, and it knows about the "www" subdomain from "ultimate-guitar". Most likely this is an alias to another domain, like "n1.ultimate-guitar.com" or something like that. At one point you arrive at a name server that knows the IP of the specific domain you are looking for. This goes all the way back to your own PC and you receive the IP of UG's site.

Now you have the IP of UG, so what do you do? You need to send a packet to the web server in UG. The web server is an application that awaits requests in a port. A port is a 16bit number (fom 0 to 65535) that represents the application listening on a specific computer. For example, 2 applications A and B can be waiting for network requests in the same machine (which has the same IP), but one has the port "80" while the other one the port "25". If you know the port you can know whether you want to send the packet to application A or B.
An IP is an address that identifies a machine or device in the network globally, so by having the IP and the port you can identify the application on a global scale. So you need to identify UG's web server application. Luckily for you there is a standard, where the port for web servers is typically "80", and if the port isn't explicit in the URL then you can assume it's that one.
So you have the IP of UG and the port "80". You also can find out the IP of your own machine (by quering the underlying OS). So now you have everything you need to send the HTTP message to UG right? Well no.
You need to send the packet using a "transport protocol", in this case TCP. TCP allows you to create a "socket" that represents the network connection between the application in your PC that wants to send the packet, and the application in the server that wants to receive it. For that, the web server in UG needs to be "listening" on a socket in port 80. If this is true, then you can create a connection by creating a local socket with this information: <Local IP, Local port, Remote Ip, Remote Port>. You need to somehow have a local port too, because not only are you sending packets to UG, UG has to send packets back to you (it has to send you the response of your HTTP message, and also show you UG pages, etc). Thus the process is reversed, where UG needs to know your IP and port for it to send a packet to you. Thus a socket needs all 4 ports/IPs both in your PC and in UG's PC for the connection to work.

... to be continued
#20
What happens next is called "TCP Handshake". Somehow both your PC and UG need to know that there is an open connection between the two of you. Thus you need to send packets back and forth to agree to this. The handshake is basically like this: The client tells the server "Hey, I want to open a TCP connection to you with these IPs and Ports", then the server replies back "Ok, I agree to that", and then you have to respond to the server "Ok, I got your acknowledgement". Once these 3 steps are finished, both you and UG know that the socket is opened. Now you can both send packets to each other via this connection.

How do you send packets though? How does a packet leave your PC, and somehow magically arrive at UG's PC? This is where IP ("Internet Protocol") comes in.
Forgot to mention that an IP address, in IPv4 (first version of IP) is a 32bit number. This number is usually split into 4 identical groups of 8 bits, and then it interprets each one as a separate number and it joins them by using dots. That is why "198.168.2.33" is a valid IP address, since it's the union of all those 4 8-bit numbers into a single 32-bit number
That corresponds to IPv4 though. If you notice, a 32-bit number only allows you 4294967296 possible IP addresses (= 2 ^ 32). These seem a lot, but are in fact very few, considering all the computers and devices connected to the internet. We are running out of IP addresses (in fact, I think we've already run out of them). One of the solutions is a new protocol called IPv6 which is having increased adoption throughout the years. This new protocol allows IP addresses to be 128 bits long, instead of 32 bits. This basically means we'll never run out of IPv6 addresses (2 ^ 128 = 340,282,366,920,938,000,000,000,000,000,000,000,000).
An example of an IPv6 address is "2001:db8:85a3:8d3:1319:8a2e:370:7348", which is represented by 8 groups of 16bit numbers, where the numbers are represented in hexadecimal (to avoid VERY long addresses if written in decimal).

Anyways, the TCP connection that was opened earlier did have a local IP (yours) and a remote IP (UG's). What TCP does first is put all the other info, like the body of the HTTP message, plus the ports and other information needed by TCP (for things like throttling, managing retries, managing the ordering of packets, etc) inside a "TCP packet", and that is what it sends to the remote server via the Internet Protocol. The Internet Protocol just knows how to send a packet from one IP to another one. Once it reaches the destination it gives it back to the TCP process in the remote server for it to "unwrap" the TCP packet and get all the goodies inside.
What IP takes advantage of is a HUGE network of routers scattered all across the world. A router is a simple device (think of it as a mini-PC) that only receives IP packets, and then sends it away to other routers depending on the IP it has.
For instance, you have router A, B and C connected to each other by cables. Router A receives a packet with an IP address. By looking at this address and following some rules, it knows that it has to send the packet to router B. Later router A receives a new packet with a different IP address, and following some rules knows it has to send it to router C.
The internet is a whole network of routers, that send packets to routers adjacent to them (i.e connected to them by a local network, like with Ethernet cables, etc).
How do you send a TCP packet from your PC to UG then? Well, your local network has a router called "gateway". This is the router that you can connect to that is your entrance to the whole internet. So you basically send your TCP packet to this router, and ask it to deliver it to UG. To do this you need to put the TCP packet inside an "IP packet", which has the previous packet inside of it but also adds the source IP, the destination IP, and other headers necessary for the protocol to function correctly (like the "Time-to-live" header which indicates a maximum amount of time for the packet to be valid, which is done so a single packet doesn't wander around the whole internet forever if it's ever lost, and can be axed if its TTL is over). You have to think of this as putting an envelope inside another envelop. The first small envelope is the HTTP packet, which you then put inside a bigger envelope which is the TCP packet, which you put inside an even bigger envelope which is the IP packet. This IP packet is the one that is sent around the internet, but the contents of it are not touched or relevant. The "IP envelope" is only opened when it arrives at its destination, which TCP reads and handles.

How does your IP packet go from your gateway router to UG then? How exactly do all those independent routers know where to send your packet just based on its IP? Well, first, the internet is divided in "domains". These are basically the networks of countries, which are separated from each other and only connected at specific routers. The "routing" is done differently when the packets travel inside these domains, than when they travel from one domain to the other.
Let's focus on the "intra-domain" (packets travelling inside a domain) for now and one of the protocols used for it: RIP (Routing Information Protocol).
Basically, every router has other routers (or devices, like PCs, etc) adjacent to it via network ports. These ports can be named, like port 0, port 1, etc. The router knows that if it sends a packet via port 0 it will go over to router A, if it sends a packet to port 1 it will go to router B, etc.
So the router has this little table, that says "When an IP comes that matches this IP, then it goes to port 0, when an IP matches this other IP, it goes to port 1".
The "matching" is done with something called "subnetwork mask". A subnetwork mask represents a subnetwork, which is basically a group of IPs. These subnetworks have the same prefix, i.e all the IPs in it start with the same numbers. So a subnetwork like "192.168.1.0/24" indicates that it contains all IPs that have 24 bits in common with 192.168.1.0, which basically means that it contains all IPs that start with "192.168.1" (ej "192.168.1.0", "192.168.1.120", etc). So this table basically says "If the IP from this packet belongs to this subnet, then make it go through port X".
This is called a "routing table", and the process of picking an IP packet, checking the table and figuring out which port to send it is called "forwarding".

Every router knows how many "hops" (number of routers a packet has to go through before reaching a destination) a packet with an IP inside one of these subnets needs to reach its destination when sent through any port. For instance, it knows that for subnet "192.168.1.0/24" it needs 9 hops to reach its destination if sent through port 0, but it needs 11 hops if it's sent through port 1. In this case, the router updates its routing table to indicate that any IP that follows that subnet must go through port 0 (since it requires the least amount of hops, thus is closer). After it's sent to the next router, the next router will have a subnet that needs 8 hops to reach its destination through port 3, so when the IP packet arrives it goes through port 3. This goes all the way until the packet reaches a router where its subnet needs 1 hop, and thus after sent through that port it reaches its destination.
The RIP protocol indicates what information each router should send each other to update its routing table with the best information possible. This is a semi-complex graph problem, where basically every router sends its own information about "hops" to nearby routers, and receives information from them too, and uses this info to figure out if it needs to update the hops of its table. For example, if a router suddenly shuts down, then all nearby routers can't send packets through it, so the info about how many hops they can send a packet is invalid so it needs to be updated.
This can be solved by having all routers send the info of their tables to surrounding routers every couple of seconds and updating their tables every couple of seconds too.
Something similar happens with routing between domains. The routers at the edge of the domain give info about hops and stuff to the router in the other domain, and this one propagates that information to routers inside the domain in a distributed fashion.

So with that, the packet from my PC FINALLY arrived at UG. Then the process at the server took the TCP packet from inside out, and took the destination port to figure out it needed to be sent to the web server at port 80. This web server took the HTTP packet out and read it, and realized it was a POST message to the url "newreply" with a bunch of form values (one of them being this text I'm writing right now). With this the server realizes that I'm creating a new post at a specific thread (which is one of the variables sent in the form), so it makes the post.
After this, UG does the reverse process to send me an HTTP response of "200 OK", and in its body it sends to me the HTML page of the thread with my post in it, so I can read what I've posted.

And with that, I finally made a post in UG.

And that's without even touching how packets are actually sent from router/PC to router/PC in a local network (with Ethernet, or even Wifi, etc), nor how exactly the browser uses this HTML it received from UG to render the UG page for me to see my post.
We'll leave that for another time ...

Oh, and if ANY of these processes fail, you can't submit the post to UG and everything fails. So truly be thankful anything of this not only barely works, but works pretty good most of the time.
Last edited by gonzaw at Feb 18, 2016,
#22
Damn... I was gonna try to explain something cool about quantum mechanics but shit, posting on UG is far more complex than anything I know lol
#24
gonzaw... my sysadmin bro. Sigtermed dat bitch

I'm going to be much more brief.


Counterpoint basics:

consonant intervals: 3rds, 6ths,
less consonant: unison (octave), perfect 4ths/5ths
dissonant: 2nds, 7ths, aug4th/dim5th

In general, 2 lines will move in the same motion when meeting at consonant intervals. For dissonant intervals, the dissonance is resolved stepwise in opposite directions by at least one of the lines to a consonant interval.


Counterpoint lines (melodies):

- generally move stepwise (whole steps and half steps)

- when they leap (3rds, 4ths, etc), it is usually to a chord tone. Ex:
E ↑ C for a C maj

- they can also leap to a note that will move stepwise to a chord tone. Ex:
C ↑ Ab ↓ G embellishing a C maj

- generally tend to be "elastic" in nature, ie a big leap up will then move downward. Ex:
E ↑ C ↓ B ↓ A ↓ G ↓ F ↓ etc, for a C maj to something else

...modes and scales are still useless.


Quote by PhoenixGRM
Hey guys could you spare a minute to Vote for my band. Go to the site Search our band Listana with CTRL+F for quick and vote Thank you .
Quote by sam b
Voted for Patron Çıldırdı.

Thanks
Quote by PhoenixGRM
But our Band is Listana
#25
Well, you guys wanted complex, you get complex.

The IT world is so complex, that we regard the best of the best as the ones that can make stuff the simplest (even if it doesn't work). And bear in mind that what I posted above (the layers of network and internet) is considered the "pinacle" of design and simplicity.

... now you know why the staff at Google/etc need those video games, massages, free naps and bycicle rides. Their heads would literally explode otherwise.
#26
Um well

You can lift a certain weight for a lot of times and get something out of it

or lift another certain weight for less or more times and get something else out of it

and thus is weightlifting and exercise
My God, it's full of stars!
#27
Quote by Dreadnought
Um well

You can lift a certain weight for a lot of times and get something out of it

or lift another certain weight for less or more times and get something else out of it

and thus is weightlifting and exercise

Would you say this can solve any and all problems one might face?
#29
Quote by gonzaw
Well, you guys wanted complex, you get complex.

The IT world is so complex, that we regard the best of the best as the ones that can make stuff the simplest (even if it doesn't work). And bear in mind that what I posted above (the layers of network and internet) is considered the "pinacle" of design and simplicity.

... now you know why the staff at Google/etc need those video games, massages, free naps and bycicle rides. Their heads would literally explode otherwise.

And it still fades into insignificance next to the power of the Force.

Or the ludicrously complex system that is anything that's alive
#30
Well...masturbation may not be all that complex, but I do know a lot about it. for instance;

Masturbation is for sexual pleasure. It will not prevent cancers. However it may have a small chance in the prevention of prostate cancer in older men if done regularly.
It is not unhealthy to masturbate as long as it is done in private.
Flying in a blue dream
#31
Quote by gonzaw

The IT world is so complex, that we regard the best of the best as the ones that can make stuff the simplest (even if it doesn't work).


That's the case everywhere. If you're an expert, and you can't explain what you do to a layman in terms that THEY can understand, you're not really an expert.

I've met several extremely intelligent people in some very advanced fields and almost without exception they were able to explain their area of expertise so even a knobhead like me could understand at least the broad strokes of what they were doing or trying to do.

I'm sure that, as with most things, there are some exceptions to this, but I've not found them yet.
“Ignorance more frequently begets confidence than does knowledge.”
Charles Darwin
#32
philosophy of law is pretty complex because everything is right, where right is always wrong in some aspect.
Quote by arcanom
Mint and chocolate shouldnt be togather.
"Literally Worst Post of 2k16" approved by After Eight Lovers...
#33
So you've got a battery with a piece of wire connected to each terminal. You hold the wires close together, but not so they touch. The electrons in the negative wire want to move to the positive wire, but they don't have enough energy to jump the gap. So you add a third wire and pass a current through it. It heats up like a lightbulb, and heats the negative wire as well. The problem now is that electrons are tiny and they collide with air particles, so in order for this to work, it has to be done in a vaccum. So now you've got electrons moving through a vaccuum, repelled by the negative wire and attracted to the positive one. If you want to get really crazy, you add a metal grid in between the two wires. By adjusting the voltage on the grid, you can repel some of the moving electrons, and effectively control how many of them jump the gap, and that is basically how tube amps work.
#34
Quote by sashki
So you've got a battery with a piece of wire connected to each terminal. You hold the wires close together, but not so they touch. The electrons in the negative wire want to move to the positive wire, but they don't have enough energy to jump the gap. So you add a third wire and pass a current through it. It heats up like a lightbulb, and heats the negative wire as well. The problem now is that electrons are tiny and they collide with air particles, so in order for this to work, it has to be done in a vaccum. So now you've got electrons moving through a vaccuum, repelled by the negative wire and attracted to the positive one. If you want to get really crazy, you add a metal grid in between the two wires. By adjusting the voltage on the grid, you can repel some of the moving electrons, and effectively control how many of them jump the gap, and that is basically how tube amps work.


Nice!
“Ignorance more frequently begets confidence than does knowledge.”
Charles Darwin
#35
Quote by sashki
So you've got a battery with a piece of wire connected to each terminal. You hold the wires close together, but not so they touch. The electrons in the negative wire want to move to the positive wire, but they don't have enough energy to jump the gap. So you add a third wire and pass a current through it. It heats up like a lightbulb, and heats the negative wire as well. The problem now is that electrons are tiny and they collide with air particles, so in order for this to work, it has to be done in a vaccum. So now you've got electrons moving through a vaccuum, repelled by the negative wire and attracted to the positive one. If you want to get really crazy, you add a metal grid in between the two wires. By adjusting the voltage on the grid, you can repel some of the moving electrons, and effectively control how many of them jump the gap, and that is basically how tube amps work.

So I hooked up my guitar to a car battery and air is being drained out of the room as we speak. Are you sure this will work?
#36
Quote by ultimate-slash
So I hooked up my guitar to a car battery and air is being drained out of the room as we speak. Are you sure this will work?



If that's what you got out of that, I'm pretty sure the oxygen content in the room was already pretty low...

“Ignorance more frequently begets confidence than does knowledge.”
Charles Darwin
#37
midochlorians are the powerhouse of the force
dirtbag ballet by the bins down the alley
as i walk through the chalet of the shadow of death
everything that you've come to expect