The magnetisation characteristics mu_r(B) of all soft magnetic materials currently included in this library are approximated with a function. Each material is characterised by the five parameters of this function. The approximated characteristics mu_r(B) for most of the ferromagnetic materials currently included are shown in the plots below (solid lines) together with the original data points compiled from measurements and literature.
For the nonlinear curve fit, data points for high flux densities (approximately B>1T) have been weighted higher than the ones for low flux densities. This is due to the large impact of saturated ferromagnetic sections in a magnetic circuit compared to that of non-saturated sections with relative permeabilities mu_r>>1.
Note that the magnetisation characteristics largely depend on possible previous machining and on measurement conditions. A virgin material normally has a considerably higher permeability than the same material after machining (and packet assembling in case of electric sheets). This is indicated in the above plots by different magnetisation curves for similar materials. In most cases, the original data points represent commutating curves obtained with measurements at 50Hz.
Additional user-specific materials can be defined as needed. This requires determination of the approximation parameters from the original data points, preferably with a nonlinear curve fit.
| Name | Description |
|---|---|
| BaseData | Coefficients for approximation of soft magnetic materials |
| Steel | Various ferromagnetic steels |
| ElectricSheet | Various electric sheets |
| PureIron | Pure iron |
| CobaltIron | Cobalt iron |
| NickelIron | Nickel iron |
| mu_rApprox | Approximation of relative permeability mu_r as a function of flux density B for soft magnetic materials |


Power Saving Techniques
One of the most important goals for this project is minimising power consumption, in order to maximise battery life. A significant amount of power is wasted by idle nodes continuously listening for radio activiy. There are significant power savings to be made by placing nodes' radios in sleep mode to avoid unneccesary listening, especially in low traffic networks.
Scheduled Rendezvous
Many data collection applications require regular bulk data transfer from each sensor node back to the information sink; i.e. the traffic pattern is predetermined and periodic. A scheduled rendezvous protocol suits this application ver well, that is all nodes wake up simulateously, forming a short window for communications.(Figure 1). For the example of collecting data from Great Barrier Reef weather stations, the data would be collected every hour, so a possible schedule would be wake up for five minutes at the beginning of every hour.
|
| Figure 1: Nodes wake up for 5 minutes every hour |
However, there are a number of problems with this approach:
Some researchers have argued that scheduled rendezvous is not viable in ad hoc networks due to the difficulty of distributed clock synchronisation. Normally, the length of an active interval would be in the order of milliseconds. However, the active intervals considered for this project are in the order of minutes, hence the synchronisation has a much larger tolerance for error.
The second problem is gradual drifting of the sleep cycles in different nodes (Figure 2). This is easily countered using a technique called phase detection, which basically involves calculating the difference in phase between two nodes' schedules. The only information required is a counter indicating the phase of the source node, which allows receiving nodes to calculate their respective phase difference, and if neccesary make adjustments.
The third problem is significant: there is no connectivity between nodes during the sleep periods. Normally this is not a problem, as the sleep period is in the order of milliseconds. However, when the sleep period is in the order of hours, operations such as adding a new node to the network cannot occur until the next rendezvous occurs. Additionally, if two nodes are out of phase, they may never discover each other (Figure 2). The solution: preamble sampling.
Back To Top
Preamble Sampling
Preamble sampling allows the network to retain connectivity in power save mode. The cost is a higher energy cost to transmit, but idle modes are able to make drastic power savings.
Preamble sampling involves using long packet preambles as a mechanism to wake up other nodes. Idle nodes do not continously listen to the medium, instead they briefly check for activity at regular intervals. If any activity is detected, the node stays awake until it is satisfied the activity has ceased.
The key concept is that the preamble is the same length as one sampling cycle, so that every node will sample and be woken by the preamble, regardless of the phase of its schedule. Therefore, there is a tradeoff: With a slower sampling frequency (lower duty cycle), more power is saved by the receiver, but more energy is required to transmit the longer preamble. The approximate power savings are given by:
Where:
- Pnet is the total power saving (Watts)
- t is the length of the sleep interval (seconds)
- T is the length of the listen interval (seconds)
- Pt is the power consumed whilst transmitting (Watts)
- Pr is the power consumed whilst receiving (Watts)
- f is the average number of packets transmitted per second (Hz)
- n is the average number of nodes affected by each transmission (network density)
This expression was plotted in MATLAB with parameters based on the actual hardware being used for the project, and several traffic rates and node densities:
|
Figure 3: Power Saving vs Sampling Frequency
Low Traffic = 1/1800 Hz, Medium Traffic = 1/60 Hz, High Traffic = 1 Hz |
As can be seen in Figure 3, the best power savings occur with low traffic levels and low network density, thus this technique is well suited to the application. The maximum power savings are approximately 99%.
The optimum sleep interval is given by:
Note that the optimum sleep interval is dependent on the network density, and more importantly, the traffic rate.
Back To Top
Dynamic Optimisation
"Conversations" between two or more nodes may cause localised increased traffic levels. If these changes can be anticpated, the sampling frequency can be dynamically optimised to acheieve the best power savings. This has been implemented and verified in its simplest form:
- After a node transmits or receives a packet, it raises its sampling frequency for a predetermined timeout.
- After a node transmits a packet, it switches to using a shorter preamble.
If a node transmits a packet, it knows its neighbouring nodes will have raised their sampling frequency, so it can still talk to them with a shorter preamble. However, this approach lacks intelligence: A node will always raise its sampling frequency after transmitting or receiving, regardless of the probability of any further activity occurring. Future work may involve using network and application layer information to decide how to adjust the sampling frequency and preamble length, which would result in a very intelligent algorithm.
Back To Top


Before beginning rotation 2 we did design challenge projects with partners. My partners were Maggie, Erin and Marcella.  We were told to build the tallest tower possible out of the following materials that could balance the marshmellow on top. My team got second place and had a tower of over 30 inches tall. This challenge was really fun and a good way to start the class.
For our first project, we designed a wax stamp. I built my stamp on Fusion360, a new program to me. I first started out by watching videos on how to make a stamp, but I eventually went with my own idea for the design. I started off by makning a horizontal cylinder and then extruded it. Next I created a vertical cylinder on top of the horizontal cylinder and then extruded it. After both were extruded, I champfered both of them. The most difficult part was trying to get each curve of the whale to be the same angled arc. This took me many attempts but I finally figured it out. I found it pretty difficult to use at first but then I began to get used to it. I designed my stamp as a whale. My first stamp attempt did not work out because my stamp was way too large (three inches), so then I reprinted it at 40% of the original size.


Canopies and windows
June 31, 2017 by John
After receiving a number of helicopters to paint recently I was looking for a way of improving the look if not the accuracy of the helicopter canopies. This method can be used for all vehicle glass where you don’t want to see the cockpit details or when you can’t as with resin models - so helicopters, aircraft and futuristic vehicles like Eldar flyers are all candidates.
The result is striking but not 100% realistic and I suspect works best when the aircraft is imagined to be flying in a clear blue sky…
I used a Loach by Battlefront and Vallejo paints
It was undercoated black for no better reason than I always undercoat anything ‘vehicular’ black then started the windows with a coat of the darkest blue. Working on the principle that the dark blue sky above would provide less reflected light than the ground below I then airbrushed increasing amounts of lighter blue towards the bottom.
In truth I have no idea if this principle is true and as you can see I also ignored the principle occasionally. Once done I dotted a little highlight in the dark area for effect.
As an aside, once I had the hang of this I latterly added a further subtle spray of a greeny yellow around the bottom edge of each panel to suggest a reflection from the ground as well but this is one of those things which may not be worth it.
I then sprayed the whole with gloss varnish to protect against the damage I was sure I would inflict in the next stage.The next picture does not show badly applied gloss varnish but is the result of thickly applied rubber masking solution.
This needs to be applied right up to the edge and even into the little runnels or grooves around the glass but no further if using an airbrush as it is really difficult to colour match any resultant mistakes on modulated airbrushing.
Brushes can be cleaned in warm soapy water, the warmer the better but you won’t be using that brush for any detailed work again. Leave to dry and check for gaps...a learning moment was had here. Gaps are bad. If you see any gaps don’t try to put more masking on until the previous is dry…another learning moment.
Once dry you’re good to go with painting the rest of the model. In this case it was airbrushing ever lighter coats of Olive Drab. As a personal preference I like modulation painting but like it to be subtle over larger areas with no clear delineation. By contrast where there are panels etc I am more defined. On this Loach it is less obvious.
After painting the usual steps were taken involving filters, washes and weathering. I might be wrong but I assume that aircraft of all types - unless in very difficult circumstances - will be looked after and maintained better than ground vehicles and crash into stuff infrequently. Probably only the once really. As such there is less chipping etc
Removing the masking fluid is a bit picky. Most can be gently rubbed off with your thumb but where it clings onto details it needs to be removed with a wooden toothpick, trying to avoid scratching beneath. At this point it can look a bit ragged as below but don’t get depressed.
Where the effect runs just short of the frame you can fill with thinned colour until you get close enough and if the glass effect is into the frame grooves that will be covered by darker washes.
Below are couple of finished Heli’s showing the nice contrast between canopy and fuselage. As always rule of cool wins over 100% accuracy.


"Michael Bierut studied graphic design at the University of Cincinnati’s College of Design, Architecture, Art and Planning, graduating summa cum laude in 1980. Prior to joining Pentagram in 1990 as a partner in the firm’s New York office, he worked for ten years at Vignelli Associates, ultimately as vice president of graphic design" (Michael Beirut, 2016).
“you can sit quietly and wait for instructions or take some initiative”
Michael Bierut
Michael Bierut. (2016, March 16). Retrieved April 16, 2016, from http://www.pentagram.com/#/partners/109667


Combined Result:
{% if fin_totFake >= fin_totReal %}
Fake/Dodgy
{% else %}
Seems Legit/True
{% endif %}
Probability of Fake: {{ fin_probabilities.0|floatformat }}% chance of Fake
Probability of Dodgy: {{ fin_probabilities.1|floatformat }}% chance of Dodgy
Probability of Mostly True: {{ fin_probabilities.2|floatformat }}% chance of Mostly True
Probability of True: {{ fin_probabilities.3|floatformat }}% chance of True
Individual model results
Support Vector Classifier Result:
{% if svc_totFake >= svc_totReal %}
Fake/Dodgy
{% else %}
Seems Legit/True
{% endif %}
Probability of Fake: {{ svc_probabilities.0|floatformat }}% chance of Fake
Probability of Dodgy: {{ svc_probabilities.1|floatformat }}% chance of Dodgy
Probability of Mostly True: {{ svc_probabilities.2|floatformat }}% chance of Mostly True
Probability of True: {{ svc_probabilities.3|floatformat }}% chance of True
Logistic Regression Result:
{% if log_totFake >= log_totReal %}
Fake/Dodgy
{% else %}
Seems Legit/True
{% endif %}
Probability of Fake: {{ log_probabilities.0|floatformat }}% chance of Fake
Probability of Dodgy: {{ log_probabilities.1|floatformat }}% chance of Dodgy
Probability of Mostly True: {{ log_probabilities.2|floatformat }}% chance of Mostly True
Probability of True: {{ log_probabilities.3|floatformat }}% chance of True
Multilayer Perceptron Result:
{% if mlp_totFake >= mlp_totReal %}
Fake/Dodgy
{% else %}
Seems Legit/True
{% endif %}
Probability of Fake: {{ mlp_probabilities.0|floatformat }}% chance of Fake
Probability of Dodgy: {{ mlp_probabilities.1|floatformat }}% chance of Dodgy
Probability of Mostly True: {{ mlp_probabilities.2|floatformat }}% chance of Mostly True
Probability of True: {{ mlp_probabilities.3|floatformat }}% chance of True
Extracted words: {{ words }}


Get personal loans of up to $50,000
- Get low rates
- Apply online in minutes
- Convenient Payback
{% extends 'base.html' %}
{% load static %}
{% block content %}
{% include 'pages/partials/header.html' %}
Get personal loans of up to $50,000
Peer-to-peer lending allows you to lend your money to
people online. It's a type of investment that we make
as easy and rewarding as possible.
Browse several loan listings from approved creditworthy borrowers on Lendy
Earn 4% - 6.5% per annum over 5 years and 3% - 5.0% per annum over 3 years with Lendy
Diversify your Lendy portfolio by investing in different loans and borrowers
Browse loan applications from credit-checked borrowers with various ratings and terms
Choose and fund the loans you wish to invest in with various amounts
Receive your monthly returns in your Lendy account and reinvest or withdraw
Average Credit Score
College Educated Borrowers
Average Borrower Income
Don't take our word for it. Read testimonials from actual investors on Lendy
Lendy is by far the easiest way to invest I have found online and I have not had a problem since I started investing with them in 2016
VP at Facebook
Lendy is by far the easiest way to invest I have found online and I have not had a problem since I started investing with them in 2016
VP at Facebook
Lendy is by far the easiest way to invest I have found online and I have not had a problem since I started investing with them in 2016
VP at Facebook


Loading
{{ my_user_email }}
logout
{% for language in languages %}
{{ language.label }}
{% endfor %}
Leaders:
Apply to be a translator
Original
Translation


Engineers Without Borders IIT Madras builds a better world through engineering projects that empower communities to meet their basic human needs and equip leaders to solve the world’s most pressing challenges. Our 16,800 members work with communities to find appropriate solutions for water supply, sanitation, energy, agriculture, civil works and structures.
Join the movement.
“I have become a stronger leader, a more skilled worker, a better interdisciplinary student and a more compassionate engineer because of EWB-IIT Madras, India."


Building tools to help fact checkers
2018-10-02
In early 2016, in collaboration with academia and the fact checking community, Google and schema.org helped to define a new structured data open standard, ClaimReview. In doing so, tech companies started to highlight high quality fact checking content, starting with Google through fact check tag and search rich snippet. Bing, Facebook and others soon began to do the same.
In May 2018, we introduced DataCommons.org, an initiative for the open sharing of data, and released the first fact check corpus to help academia and practitioners to study misinformation. This sample dataset of fact checks came from a small but diverse set of publishers. Still, the release of this open dataset led to more interests from researchers around the world to study misinformation. We also received requests from academia to update the fact check corpus regularly and allow more publishers and non-technical users to add ClaimReview markups.
In the effort to continue to bolster high quality information on the Web, today, we are pleased to share two new tools by Google, starting in limited beta with the academia and journalist communities: Fact Check Explorer and Fact Check Markup Tool.
Both tools can be found on Google's newly created experimental Fact Check Tools site. To start, the Fact Check Explorer (FCE) acts as a search engine for fact checking content and allows users to easily search for and find fact checks relevant to a topic of interests. Was a new species of trout discovered in Pennsylvania? Is the WhatsApp rumor about India’s government distributing free cycles to students true? What topics has a certain publisher fact checked? All of this can be found in the tool.
The Fact Check Markup Tool, to complement this, makes it possible for journalists and fact checkers to add ClaimReview markup to their articles without having to code or mess around with their CMS, making the whole process easy to use even without coding skills. Here’s how it works: a journalist from a publisher copies the URL of an article they want to add the markup to, pastes it into the tool, completes the form (e.g. who made the claim? What is the verdict? etc.) and then clicks "submit". Once completed, the data will be shared openly on DataCommons.org for any and all interested companies to access and programmatically incorporate into their products. Note that a journalist can only create markups for pages from their own publishers.
Screenshot of the Fact Check Markup Tool, now in beta.
These two tools are being made available on limited release to select journalists and fact-checking organizations. The International Fact Checking Network will determine those users, in line with their Code of Principles. Over time, access to these tools will be opened more broadly.
In line with our commitment to continued sharing of data, all ClaimReview markup data created via the Fact Check Markup Tool will be available via the Fact Check Markup Tool Data Feed in DataFeed format and will be updated on a frequent and regular basis. We are also releasing an updated version of the research Fact Check Corpus. Again, the meta-data in both datasets follows the open schema.org standard (ClaimReview) that has been adopted by most fact checking organizations and is currently being used by Google News, Google Search, Bing News, Bing Search, Facebook and others. And the field "url" points to the original fact-checking articles, whose content are not part of the released datasets and reside on the publishers' sites.
We would like to thank all the contributors for this launch and especially call out International Fact-Checking Network and Duke Reporters' Lab for their continued partnership.
ClaimReview was developed three years ago through a partnership of the Duke University Reporters’ Lab, Google, and schema.org. A pioneer of the digital fact-check movement, Duke’s Bill Adair is also announcing today, with the help of a grant from the Google News Initiative, a new global effort to help journalists and fact checkers adopt ClaimReview in their fact check operations. Read more about the effort here.


Before I start I would like to say that I am only 14 years old.
I would also like to comment on the prices specified for E and dope...'A single tablet bought at a rave can cost as much as $50 though more commonly $20-$30. Purchased in higher quantities MDMA generally sells for $100-$250 per gram (about $10-25 per dose), with wholesale prices as low as $50 per gram.'...Where I live, in the middle of farm country, England, nowhere, I can score a pill for around £5 (about $8). And cannabis prices...'generally $30-$60 for 1/4 ounce of lower quality and $60-$120 for 1/4 ounce of high quality bud'...are quite expensive too...a quarter of hash will set me back £20 (about $35), and to give some idea of potency, a quarter of the stuff around here will get 8 people very stoned.
Over the last few months my life has changed dramatically. But for the better, definately. 4 months ago I had no social life. Now I go to parties every weekend. 4 months ago my drug use was limited to a glass of wine with my parents every now and then. Yesterday I took my first pill.
I think that it is to do with my personality. Every time in my life when I find something that is fun, I do it over and over again and explore all the possibilities available, and this only ends when I find something else to take it's place. My new craze, unfortunately, is drugs.
This man i'd never seen before was wearing the same Nirvana T-shirt as me, and so he invited me to a party. AS a result, I got incredibly drunk. I loved the feeling. I could talk openly to people, I was more popular when I was drunk and everything seemed more fun. So for a month I got drunk every weekend.
Next month, the same guy (who goes to the same school as me) invited me to another party. Here I smoked my first joint ever. Again, I loved the feeling. This time it was relaxing, calming, and lifted my mood. So for the next 2 months I got stoned every weekend. In those 3 months, I grew very close to a friend I didn't know I liked so much, called Lizzie. She was much more experienced with drug use than me, having smoked her first joint at 12 and taken ecstacy at 13(!!!). So at the beginning of month 4 of my new obsession, we drop a pill together.
we'd managed to get hold of 'dexters' at £8 ($13) per dose. They had a pretty picture of dexter from the TV show on the front, and I happily munched mine in a fruit pastel (pastille, pastil, pastelle, how the hell do you spell that?). THe Nirvana T-shirt guy, who was now one of my best friends, said that if I stared into his eyes i would 'come up' harder and faster. I realise now, having read the literature, that this was probably untrue, but could it possibly have had psychological effects? Well anyway...we dropped the pills at 7:30.
After about 15 minutes of walking around the park we met some of Lizzie's 'friends' who steal from her, insult her and aren't actually very nice people at all. After their traditional cry of 'Lizzie, gimme a fag' (fag being English slang for cigarette) we had a chat with them about this and that, and they offered us a couple of shotties. (I'll explain shotties later...they're like bongs but I think they only come from the south-west of England...no-one i've met from anywhere else has heard of them)
So about 30 minutes after dropping, we're feeling nicely stoned from the shotties. Suddenly, a surge of energy and euphoria takes me, and I find myself sprinting around the park. After some odd looks from Lizzie's friends, I return for another shotty and declare to the world 'I'm coming up!!!'
Lizzie also was feeling the effects, so we thought we had better do something fun. So we stomped off to the fairground. Here we found this ride called 'orbiter' which spins you aroundd and up and down and sideways and inside out etc etc...so we decided to give it a whirl. There was some loud dance music coming from a nearby speaker, and this complemented the movement of the ride so well. It was like flying through space at a million kilometres per second. When the ride stopped we got off, hugged each other, (hugged the ride operator too :) and set off somewhere to chill out and sip some water.
THe beach wasn't far away, so we walked off to there. On the way through, we met Nirvana T-shirt guy again, and hugged him and all his friends, and told them how much we loved them all. Walking through town was just like...just like normal, except everything was perfect. They were the same streets, but the lights and music from inside the clubs was so uplifting, and the cars passing by looked so perfect. Everything was right with the world. That's what I love about drugs.
Sitting on the beach, we had a long conversation about how we had grown very close to each other over the past few months, and we also phoned some friends and told them how special they were and how we could never live without them. I felt an emotional bond between me and Lizzie and everyone we phoned. Even the people I hate didn't seem so bad. I felt sorry for them, thinking how sad it was that they were so nasty. we decided that trying some Poppers (a liquid you sniff) while on E would be fun. So she took out the bottle, and we each took 2 long hits. simultaneously, we let ourselves lie back on the sand, the only words coming from our lips were 'i'm so wasted'. It was a very strange hit, and I loved every bit of it. Lizzie described it as being similar to Valium, which I have never tried, but you may be able to relate to that.
Floating along the streets, we returned to my house. It was about midnight, and the effects were wearing off rapidly. With the last few minutes of ecstacy, we talked about how similar we were, having birthdays within 2 days of each other, having the same hobbies, both of us being intelligent, and our ability to get on with each other so easily. At about 2 in the morning, Lizzie went home and I watched TV for a while and sipped my water.
Best night of my life. By far.
And I will definately try it again, always with people who I would like to become good friends with. It just sets the whole world right, for a few hours. I love it.
The morning after. A slight hangover, as if I'd been drinking. I didn't expect that. A few shotties brought that to an end. I think I had bettter explain shotties now.
A shotty is just a 500 ml coke bottle with a metal tube, in this case a windchime, going into it. You prepare the hash/bud just as if you were going to make a bong mix. To load them, you roll a very small pinch of tobacco up into a ball and plug the end of the tube with this ball. then you take the tube out of the bottle and press it on the prepared hash so it picks it up. About 4 'dabs' is enough. Then you put the tube back into the bottle, light the substance at the end of the tube and suck through the top of the bottle. Although this is vastly inferior to a properly made bong, you can do this anywhere with just a tube in your pocket. Just buy a drink and then use the bottle
| |
/
| |
| | //------Metal Tube
| |//
| //
|~~~~~//
Water -------- |
--------
This turned out to be most of my life story, aswell as the experience :) sorry....
I hope you found this interesting, it felt good to get it all off my chest.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Before 4.6.1. Lack of 'experimental' rendering in the browser (more on this later). PhoneGap? Nope.
4.6.1. The minimum version of the SDK that we can support. Yes!
4.7 aka Storm. We're good.
5.0 and beyond... Things are looking good, but we still need to implement. SDK currently in beta.
The SDKs boil down to J2ME plus a proprietary library developed by RIM -> not open-source. Sadface.
(Rough) Overview of the BlackBerry Market
Fragmented.
4.2 and below: about 30%; All models up to the early Pearl (BlackBerry 8230)
4.2 to 4.6.1: about 30%; Later Pearl models up to the Bold (BlackBerry 8230 to 9000)
4.6.1, 4.7 and up: about 30%; Recent models like the Bold, the Storm and the Tour.
PhoneGap applications can realistically target 40-50% of all Blackberry devices right now; this number can only grow in the future.
What Can We Do On A BlackBerry?
PhoneGap API, pretty much everything the iPhone can... except:
Accelerometer. SDK access came recently (Storm, Storm 2 and Tour are only models that have accelerometer at this time)
Browser is limited. No XUI, limited DOM implementation and primitive JavaScript error handling. More on this in a bit.
Standards: We've seen this problem before
For PhoneGap to achieve its goal, it needs to have a consistent API across platforms.
BlackBerry Browser Implementation
Support for 'experimental' rendering necessary. Only available for recent SDKs, main reason for exclusion of old models. This came up on StackOverflow...
A lot of JavaScript and the DOM implementation, which is mostly standards-compliant, works in the BlackBerry browser application, but is NOT available in the Field aka Web View.
XHR does NOT work. It's ok though. We've implemented our own in Java and added an interface to it via JavaScript.
Device & Browser Nuances
We've said this before: simulator != device
NJust on the Bold 9000 model:
Onkeyup event is not recognized but in the simulator it works.
setInterval basically works like setTimeout - probably because the browser's JavaScript doesn't have reliable timing.
One issue came up after the first on-device deployment with rendering. Details and solution on my blog.
The Browser has two rendering modes. Column View:
Native resolution of most BlackBerries is 480x320 or 480x360. Storm is the exception as it is 360x480.
Column View 'tricks' the browser into thinking the screen resolution is 1024x768, then scales everything down to match the native resolution of the particular device.
Column View will also wrap any content.
Obviously, pixel perfect is extremely difficult.
...and Page View. Page View is better. Simply add:
<meta name="HandheldFriendly" content="True" />
to the <head> of your PhoneGap page to trigger Page View.
PhoneGap BlackBerry Architecture / Design
Follows Command pattern - device functionality encapsulated in commands: TelephonyCommand, GeoLocationCommand, MediaCommand, etc.
Message passing done via cookies. We can capture both setting and getting a cookie in the browser from the native end.
PhoneGap Resource Handling
PhoneGap BlackBerry works by instantiating a mini Java browser and feeding it content to display.
We can only feed it HttpConnection objects, so we have to use Java's magical Connector.open function to create these objects.
We trick the connector to open an HTTP connection to a resource on the device by feeding it a Base64-encoded data URI of the local resource.
Can take a while to do this in-real-life-on-the-device, even with caching. For performance reasons, best to keep your entire application on one page.
PhoneGap Architecture Code
public interface Command {
String execute(String instruction);
boolean accept(String instruction);
}
public String processInstruction(String instruction) {
for (int index = 0; index < commands.length; index++) {
Command command = (Command) commands[index];
if (command.accept(instruction)){
try{
return command.execute(instruction);
} catch(Exception e) { }
}
}
return null;
}
Development Experience
The good: object statistics and memory profiler.
Garbage collection! Win, right? Well, maybe not: profiler tells a different story.
Object handles and memory aren't cleaned up properly, even if you explicitly call the garbage collector with System.gc()
You need to explicitly set objects to null once you are done with them to keep your memory footprint acceptable.
Does this even count as Garbage Collection? ... Not really.
Still Need More Testing
We haven't tested the entire DOM and JavaScript implementation.
We have developed and tested a few applications, but only on one device for now: The BlackBerry Bold.
Open-Source project - shameless plug. Want to help? Fork the repo from GitHub!
The Future Looks Good
RIM JDE 5.0 (currently beta) seems to be a significant improvement over previous SDKs.
Browser implementation to get better
DOM and CSS level 3!
Widget SDK is another avenue, but it turns out there are no sensor APIs available (i.e. accelerometer, vibration)
Useful Developer Resources
The RIM documentation... but where is it?
 Use Google:
'blackberry browser documentation'
The supported HTML, JavaScript and CSS for each SDK version of the browser.
'blackberry api documentation'
The BlackBerry Developer forums are extremely informative.
BlackBerry Application Deployment
App World - Administrative fun to get on here
Apply for signature keys ($$)
Apply as a Vendor ($$ & time)
Submit an application for approval ($20 a submission)
RIM QA team outsources the testing (10 business day turn around time).
Over-the-air deployment.
A common distribution method for a lot of mainstream BlackBerry applications like Evernote, Facebook.
Host the compiled binary (.jar or .cod files) on a web server and serve the files up with a specific MIME type (application/java-archive jar, application/vnd.rim.cod cod).
Direct downloads then possible straight from the device.


Abandoned at birth in adjacent train station lockers, two troubled boys spend their youth in an orphanage and with foster parents on a semi-deserted island before finally setting off for the city to find and destroy the women who first rejected them. Both are drawn to an area of freaks and hustlers called Toxitown. One becomes a bisexual rock singer, star of this exotic demimonde, while the other, a pole vaulter, seeks his revenge in the company of his girlfriend, Anemone, a model who has converted her condominium into a tropical swamp for her pet crocodile.
Together and apart, their journey from a hot metal box to a stunning, savage climax is a brutal funhouse ride through the eerie landscape of late-twentieth-century Japan.
 She was testing to see if the baby would cry, but the little arms and legs were still, so she peeled away the plastic wrapping over its face. She lined a cardboard box with towels, laid the baby inside, and taped the box shut. Then she tied it with string and wrote a made-up name and address on the side in big print.


An insight can optionally set the expected magnitude change of the asset over the insight period. This expected return can be used in the Portfolio Construction model to improve results.
The magnitude score is a measure of the magnitude accuracy of the predictions of your algorithm. If the sign of the actual and the expected magnitude change are different, you will receive a [0] score. If the magnitude change of the asset is equal or greater than the expected, your magnitude is considered correct, and you will receive a positive score of [1]. Otherwise, you will receive a score that is linearly proportional to the actual magnitude change:
var actual = currentValue / startingValue - 1; var expected = insight.Magnitude.Value; var score = Math.Min(actual / expected, 1);
actual = currentValue / startingValue - 1 expected = insight.Magnitude score = min(actual / expected, 1)
The scoring system only reviews the moment of the insight completion. The sum of the insights for the backtest is averaged to give your overall magnitude score as a percentage.


I was trying to set up a microblog and didn’t even know it. I was personally motivated by a sense that giving all my content to Facebook and Twitter is giving up too much. Although I blog regularly on anthro{dendum}, I wanted to start using my personal blog (Keywords) more for sharing all that stuff that I normally post to social media. I didn’t want to stop using social media, I just wanted to have more of a sense of ownership over the content I post there.
The problem is that it is so much easier to post stuff to Facebook and Twitter from my phone using their apps, or Linky, than it is to post to my own blog. Part of that is my fault. I moved my blog off of WordPress to a very geeky platform called Jekyll. While it is possible to post to Jekyll from my phone using Working Copy and some scripts you can find on the web, the whole process isn’t that great. It was while I was Googling for something better that I discovered the wonderful Micro.Blog by Manton Reece. Within five minutes I gave up trying to automate posting to Keywords from my phone and instead paid for a microblog . . . which is what you are looking at now.
At the most basic level, Micro.Blog is just a hosted Jekyll blog. Why would you pay $5 a month for this when you can host your own Jekyll blog for free on Github? That’s because of the app, which makes it super easy to write posts, including posts with images, directly from your phone or desktop. Moreover, you can host it under your own domain name (as I do). Even better, you can mirror your entire blog to your own Github account in realtime, so you are never locked in. You can go back to hosting it yourself whenever you like!
I don’t know what kind of pixie dust Manton uses, but he did much more than just make a nice interface for hosting your own Jekyll blog. He set out to make an open alternative to Twitter that functions like an old-time blog. Within the app or on the Micro.Blog website you have a Twitter-like timeline with @replies. You can also follow other users and “like” their posts. And you don’t even need to host your microblog with Manton to benefit from this - you can push posts from your own microblog as well!
As I said at the top, my goal was never to leave social media behind, just to get a sense of ownership of my content. Micro.Blog understands that and in the same way that social media is parasitic on the traditional web, Micro.Blog is parasitic on social media. You can easily set up for all your posts to be forwarded to your Twitter and Facebook accounts — something that Mastodon still makes hard to do. (See here for the rules regarding what part of your post gets posted to social media, depending on the length of the post and whether or not it contains an image.) And, of course, because it is just a blog, you have a nice old-fashioned RSS feed as well.
Micro.blog isn’t for everyone. It is still a work in process and there are a few kinks to work out. Although there are a lot of tricky things about Facebook and Twitter, this adds another layer of complexity. (Not everyone wants to learn how to format posts in Markdown.) But it already works better for me than what I was doing before, so I’m personally really impressed with it. Even if the alternative social-feed aspects never evolve into a Facebook destroyer, you still have a very nice way to update a Jekyll blog from your phone!
Regarding the social media aspect though, I do think that sites like Micro.Blog and Mastodon will eventually need to think about implementing their own algorithmic timelines. Even though part of the motivation for moving away from Facebook and Twitter is that we have increasingly less control over what they show us, I don’ t think there are many people who want to see all of my posts, not to mention all of your other friends who share too much on social media. If they work well, algorithms should show us more of what we want to see and less of what we don’t. I think a really successful open alternative to Facebook or Twitter will eventually need to think about what an open algorithm might look like.


DataHub Django Web Apps¶
Django applications are built on to of the DataHub web application. These apps do not necessarily use the DataHub API, and are not deployed in mobile environments. Instead, they are deployed on the DataHub website itself.
Existing applications¶
Console¶
Console provides a way for users to interact directly with their datahub repos.
 Users are able to sort, filter, and aggregate tables.
dbWipes¶
DBWipes helps you quickly visualize data, identify outliers, and understand where those outliers arise from in the underlying data set
Refiner¶
Refiner is a tool that converts poorly structured text files into structured tables
Sentiment¶
Sentiment is a sentiment analysis tool for DataHub
Viz2 (formerly Viz)¶
viz2 (renamed due to a naming collision) uses Google Charts to visualize the results of database queries.


Class OperationMetadata (v2.2.2)
Contains metadata for the BatchAnnotateImages operation.
Generated from protobuf message google.cloud.vision.v1.OperationMetadata
Methods
__construct
Constructor.
| Name | Description |
| data |
array
Optional. Data for populating the Message object. |
| ↳ state |
int
Current state of the batch operation. |
| ↳ create_time |
Google\Protobuf\Timestamp
The time when the batch request was received. |
| ↳ update_time |
Google\Protobuf\Timestamp
The time when the operation result was last updated. |
getState
Current state of the batch operation.
Generated from protobuf field .google.cloud.vision.v1.OperationMetadata.State state = 1;
| Type | Description |
| int |
setState
Current state of the batch operation.
Generated from protobuf field .google.cloud.vision.v1.OperationMetadata.State state = 1;
| Name | Description |
| var |
int
|
| Type | Description |
| $this |
getCreateTime
The time when the batch request was received.
Generated from protobuf field .google.protobuf.Timestamp create_time = 5;
| Type | Description |
| Google\Protobuf\Timestamp|null |
hasCreateTime
clearCreateTime
setCreateTime
The time when the batch request was received.
Generated from protobuf field .google.protobuf.Timestamp create_time = 5;
| Name | Description |
| var |
Google\Protobuf\Timestamp
|
| Type | Description |
| $this |
getUpdateTime
The time when the operation result was last updated.
Generated from protobuf field .google.protobuf.Timestamp update_time = 6;
| Type | Description |
| Google\Protobuf\Timestamp|null |
hasUpdateTime
clearUpdateTime
setUpdateTime
The time when the operation result was last updated.
Generated from protobuf field .google.protobuf.Timestamp update_time = 6;
| Name | Description |
| var |
Google\Protobuf\Timestamp
|
| Type | Description |
| $this |


{% extends "_base.html" %} {% block header %} 404 - Page Not Found
We're having trouble loading the page you are looking for.


I've been thinking for a while and the only analogy that I came up with its about drag queens.
My Brain it's quite burnt already!
Like RuPaul always says... We all born naked and the rest is CSS!
HTML will be us (a person) being naked... the plane and simple US.
By wearing clothings and accesories we are adding CSS onto ourselves. class='pants', class='hats', class='rings' class='wigs!' and all of that...
Every class or ID has properties as well like color, size etc.
The simple and plain HTML will not generate/recreate the same type of experience without CSS.
Control flow on washing my clothes?
Pick up the pile
Put it into the washing
Put some soap on the machine
Press RUN
Wait for 2 hours
Grab the clothes
Put them into the dryier
Press RUN
Wait for 2 hours
Clean/dry clothes!
A good description of a loop could be my life during lockdown:
Waking up, breakfast, work til 5, dinner, fall sleep...
Waking up, breakfast, work til 5, dinner, and again....
Waking up, breakfast, work til 5, dinner, and againnnnnn... x_x
Waking up, breakfast, work til 5, dinner ......
and that loop stopped when we went to lv 3.
The DOM means Document Object Model and its an interface that allows javascript to work with the HTML and CSS content of the webpage
You can make use of the DOM APIs to play around with all the elements that are available on the page.
If you want to access data from an array you will need to call it like this:
nameofthearray[numberoftheitemonthearray]
But of course you will need to declare that array first...
here you have a picture:
ooooopsss not that one!
this one's better:
If you want to access data from an object you will do so like this:
nameoftheobject.propertyoftheobject
In case that the object has a property that has a space you will do it like this:
nameoftheobject."property with space"
But of course you will need to declare that object first...
here you have a picture:
Functions are like little machine (or big ones)... were you can introduce something on it and it will return something else through the other side.
Each Function or Machine it's configured to always do the same procedure and depending if some conditions are passed... it will do take actions.
Functions are very useful because we can save an infinte amount of time by just declaring it once... we can reuse it as much as we like and provide different values each time.


Like on Facebook
Google+
LinkedIn
Pay with Paypal
Amazon
Call me on Skype
Last.fm
Write a review on Yelp
Check in with foursquare
Influence with Klout
View on Wikipedia
IntenseDebate
Google
Gmail
Upload to Vimeo
Read more on Scribd
Subscribe on YouTube
WordPress
Songkick
Posterous
Eventbrite
Tip with Flattr
Follow me on Plancast
Sync with Dropbox
Clip to Evernote
Follow me on Forrst
Dribbble
Sign in to CloudApp
Fork me on Github
Play on Spotify
Read It Later
Follow me on Soundcloud
Follow me on Tumblr
Read on Smashing Magazine
Available on iTunes
Available on the App Store
Available on the Mac App Store
Available on Android Market
Follow me on Pinterest
Follow me on Quora
Attend on Lanyrd
Submit resume for CEO
Download Internet Explorer 5
Report bugs with Meetup.com
Learn how-to-use OpenID
Register now for HTML6
Chat with your parents
Join me on Weibo
Plurk
Play on Grooveshark
Post on Blogger
Viadeo
Subscribe to this Podcast
View Portfolio on 500px
Bitcoin accepted here
View Portfolio on 99Designs
Bookmark with Pinboard
Stumble!
Find me on Myspace
Windows Live
Find Events with Eventful
Xing
Upload to Flickr
Del.icio.us
Download from Google Play
Reserve with OpenTable
Digg this
Share on Reddit
Fund us on AngelList
Sign-in with Instagram
Sign in as guest
View Creative Commons Licence
Add to Chrome
Sign up for Eventasaurus


class GeoJsonParser
Parses a JSONObject and places data into their appropriate GeoJsonFeature objects. Returns an array of GeoJsonFeature objects parsed from the GeoJSON file. Based on googlemaps :
https://github.com/googlemaps/android-maps-utils/blob/master/library/src/com/google/maps/ android/data/geojson/GeoJsonParser.java
Apache License 2.0
| parseFeature |
static fun parseFeature(): GeoJsonFeature
Parses a single GeoJSON feature which contains a geometry and properties member both of which can be null. Also parses the bounding box and id members of the feature if they exist. |
| parseGeometry |
static fun parseGeometry(): Geometry
Parses a single GeoJSON geometry object containing a coordinates array or a geometries array if it has type GeometryCollection |


Chapter 11 Exploring Relational Databases
When we go through the ORDER
table, we can use the CUSTOMER_ID
to look up the customer information in the CUSTOMER
table. This is the fundamental idea behind a “relational database,” where tables may have fields that point to information in other tables.


LCD03 - I2C/Serial LCD
Technical Documentation
Overview
The I2C and serial display driver provides
easy operation of a standard 20 x 4 or 16 x 2 LCD Text display. It requires only a 5v power
supply and the two data connections for either mode, freeing up pins on your
processor. Many useful text formatting functions are provided (described below)
and also the ability to put together custom characters into memory which
can be called off as required. There is a 64 byte FIFO buffer to ensure a
minimum of delay in writing to the display.
The LCD03 is the same as the LCD02 apart from the added ability to control the backlight in software. It is now easily possible to turn the backlight on and off by sending commands via the I2C / Serial link.
Connections
Connection diagram shows LCD03 with a 20 x 4 LCD, a 16 x 2 display has exactly the same wiring.
|
Easy connections for 3 x 4 |
Pins
1 and 9 are unconnected - only pins 2 - 8 are used.
Serial/I2C Mode selection
A single
jumper link is used to select Serial or I2C mode. When the jumper is present
(factory default) the module is in serial mode. When the jumper is removed the
module is in I2C mode. The mode jumper is only checked as part of the power-up
sequence, so make sure the display is off before changing modes. If you change
the link position while the module is powered, nothing will change until next
time you switch on.
FIFO
Because the I2C communications
operate faster than the display can accept data, all commands and text you send
to the display are placed in the FIFO (First In, First Out) buffer. This data is
sent to the display as fast as it will accept it. The FIFO is 64 bytes in length
and the number of free bytes can be returned in either mode. When sending lots
of text to the display, you should check the number of free bytes so you don't
overflow the buffer. If the buffer does overflow, the excess bytes are ignored.
The FIFO buffer exists in Serial mode too, but at 9600 the display is fast
enough and you are unlikely to need to check it.
I2C Operation
I2C
Bus
The I2C display is located on the I2C bus at an address of
0XC6. The SCL and SDA lines should have pull-up resistors on them somewhere
on the bus. You only require 1 pair of resistors for the whole I2C bus, not
specifically for the LCD03. They are normally on the master controller and you
may already have them. If not, anything between 1k8 and 10k should work. I
recommend 1k8 for best noise immunity. We have some example code for the
PIC16F877 using the Hitech C compiler here, and the
compiled hex here.
Display control commands
The LCD03 has four registers, three of
which are read only information registers. Register 0 is a dual purpose
register, when written, it is the command register where all of the instructions
from the commands section should be sent. When read it returns the number of
free bytes in the FIFO buffer.
| register |
Read |
Write |
| 0 | Number of free bytes in FIFO buffer | Command register |
| 1 | Keypad state Low byte | x |
| 2 | Keypad state High byte | x |
| 3 | Version | x |
Serial operation
The Serial mode operates over a link with a baud rate of 9600 bps (no parity, 2 stop bits) and 5v signals, Do NOT connect RS232 directly to the module - you will destroy it. Use a MAX232 or equivalent to convert the RS232 levels to 5v. Operation is with the same command set as the I2C mode with an additional set of commands to request data to be sent i.e. the software version.
Commands (for both I2C and Serial)
| decimal |
command |
description |
| 0 | null (ignored) | Ignored as a no operation |
| 1 | Cursor Home | Sets the cursor to the home position (top left) |
| 2 | Set cursor (1-80 or 32) | Cursor to a position specified by the next byte, where 1 is the top left and 80/32 is the bottom right |
| 3 | set cursor (line, column) | Sets cursor using two bytes, where first byte is the line and the second byte is the column |
| 4 | Hide cursor | stops the position cursor from appearing on the display |
| 5 | Show underline cursor | Changes the cursor to the underline type |
| 6 | Show blinking cursor | Changes the cursor to the blinking type |
| 8 | Backspace | deletes the preceding character from the current position on the display |
| 9 | Horizontal tab (by tab set) | Moves the current position across by the tab space set by command 18 (default tab space 4) |
| 10 | Smart line feed | Moves the cursor down one line to the position beneath in the same column |
| 11 | Vertical tab | Moves the cursor up one line to the position above in the same column |
| 12 | Clear screen | Clears the screen and sets cursor to the home position |
| 13 | Carriage Return | Moves the cursor to the start of the next line |
| 17 | Clear Column | Clears the contents of the current column and moves cursor right by one column |
| 18 | Tab set | Sets the required tab size, the following byte can be a size of between 1 and 10 |
| 19 | Backlight on | Turns the backlight of the LCD03 on |
| 20 | Backlight off (default) | Turns the backlight of the LCD03 off |
| 21 | Disable startup message | Disables the display of setup information at power up (software V9+) |
| 22 | Enable startup message | Enables the display of setup information at power up (software V9+) |
|
25 |
First byte of sequence to change LCD03 address (see changing address, software V4+) |
|
| 27 | Custom char generator | allows 8 custom chars to be built. See custom char generator below |
| 28 | Double keypad scan rate | Increases the frequency of the keypad scan to 20hz (software V3+) |
| 29 | Normal keypad scan rate | Returns to the default keypad scan frequency of 10hz (software V3+) |
| 32-255 | ASCII chars | Writes ASCII chars straight to the display |
Additional commands (Serial only)
| decimal |
command |
description |
| 14 | FIFO status | Results in the module returning its FIFO status, the number of free bytes from 0 to 64 |
| 15 | Software version | Module returns a single byte software version |
| 16 | Keypad status | Returns keypad input status, two bytes returned with the low byte first (see keypad section) |
Custom char generator
Custom characters can
be generated by sending an 8 byte map. The first thing that must be done is to
send a command of 27 to indicate that you intend to make a custom char. Next you
have to specify the position in ram of one of the 8 available chars you intend
to build, the 8 chars are mapped at positions 128-135. Then the pattern
should be sent as below.
How to calculate an 8 byte character pattern:
Eight bytes are sent with
the highest bit masked on, the next two bits are ignored (x) and the final 5
bits show the line pattern.
| Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | sent byte | ||
|---|---|---|---|---|---|---|---|
| Byte 0 | 1xx00000 (128) | ||||||
| Byte 1 | 1xx00100 (132) | ||||||
| Byte 2 | 1xx01110 (142) | ||||||
| Byte 3 | 1xx10101 (149) | ||||||
| Byte 4 | 1xx00100 (132) | ||||||
| Byte 5 | 1xx00100 (132) | ||||||
| Byte 6 | 1xx00100 (132) | ||||||
| Byte 7 | 1xx00000 (128) |
So to build the above arrow into location 128 you would send this sequence to the command register:
Now the char is built into a memory location it can be called at any time as long as the module remains powered by simply sending the address between 128 and 135.
An added feature of the module is the ability to connect a 3 x 4 Keypad, the module will automatically scan the status of the keys at regular intervals. The result is then provided in two bytes for easy use, shown by the diagram below. Each bit represents the row and column of each button on the keypad. The second row is the keypad characters when using our keypad.
| High | byte | Low | byte | |||||||||||||
|
0 |
0 | 0 | 0 | 4/3 | 4/2 | 4/1 | 3/3 | 3/2 | 3/1 | 2/3 | 2/2 | 2/1 | 1/3 | 1/2 | 1/1 | |
|
0 |
0 | 0 | 0 | # | 0 | * | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
Any key press will result in the corresponding bit in the byte being driven
high. In I2C mode these bytes are available for reading from registers one and
two.
In serial mode, just send 16 to the LCD03 and it will reply with the two
bytes as above with the low byte first.
Version 4 and above of the LCD03 software contains the facility to easily change the modules address on the I2C bus system in the range of 0xC6 - 0xCE ( even numbers only ). This is achieved by sending the following sequence:
Version 4+ also displays the current address on the display every time the module is first powered
LCD Module Dimensions
20 x 4 LCD dimensions
16 x 2 LCD dimensions
Keypad Dimensions


A Bittersweet "Return to Paradise" by Homer Yen (c) 1998
How much would you be willing to sacrifice for someone that you hardly knew? For my family and closest of friends, I'm sure that I'd sacrifice everything I could to help them. But I'm not so sure that I could say the same if the person in question was just some casual acquaintance.
Sheriff (Vince Vaughn) and Tony (David Conrad) are faced with that same moral dilemma. Two years ago, these two and Lou (Joaqin Phoenix) met as vacationers in Malaysia. They spent their days and nights picking up as many women as possible, drinking as much beer as possible, and smoking as much hashish as possible since it's so easy to buy and inexpensive too. A few days after Sheriff and Tony left, the police raided the bungalow and found Lou and all of the leftover hashish. Because of the excessive amounts found, Lou was charged with trafficking, which carries a sentence of death.
Sheriff and Tony find out about this after they are located by Lou's attorney, Beth (Anne Heche). With only 8 days left until Lou's execution, Beth explains to them that she has struck a deal with the Malaysian magistrate. If one or both goes back to share the responsibility and serve jail time, Lou's life will be spared. Tony has a beautiful fiancée, a promising life, and a heart of gold. He tentatively agrees to go back if Sheriff will too. However, the burly Sheriff who has always been reckless and careless can not find it within him to go back. And both voice extreme reservations about their chances of survival given that the prison system is fraught with disease, malnutrition, and guards that randomly torture the inmates. With time running out, Beth must find a way to change their minds.
Beth's task is enormous. She delicately walks a fine line between promoting the courage behind the deed and moral blackmail. All the while, she is also being hounded by a hungry reporter that threatens the stability of her deal. I liked Heche's performance. She remained focused and I liked the way her character tried to read every emotion in order to figure out the next mode of approach. She's sincere but also scheming at the same time. Another nice element was the questionable attraction that Heche develops for Sheriff. Is this just one of her plays? Already in a situation mired with ambiguity, this further complicates Sheriff's life as the loner slowly learns the meaning of compassion.
Despite the good performances and the pungent atmosphere, I somehow wished that this film would have been more compelling. As pure drama, this film delivers, but my reservation lies within the fact that the storyline was too cerebral in nature. I would have preferred something more visceral. I would have liked a closer examination of the Malaysian government's view on drug trafficking or would have liked to have seen the brutal environment of the prisons. I think that with that added sensation, this movie might have been more memorable. Nonetheless, Heche's worthy performance and good supporting roles merit a recommendation.
Grade: B-
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


1. Open Ethereum wallet with support of tokens (for example MyEtherWallet).
2. Click to "Send Ether & Tokens"
3. Copy crowdsale Ethereum Address:
0x59cD6FC0A78803d57c17b27349B7a910795Ca868
4. Put gas: 200,000
5. Send Ether to crowdsale ethereum address
6. Enjoy Gram at your wallet


literature
language
computer science
art
social
These are new collections list. Hope you like them. Maybe not all of them are new. But in term of time, we make sure that these are fresh from our processing oven
Ciki dan tiki unggas sahabat manusia


{{info}}
| GameID | Rounds Played | Winner | Players | Date Played |
|---|---|---|---|---|
| {{ game.game.gameID }} | {{ game.game.roundsPlayed }} | {{ game.game.winner }} | {{ game.playersNames.toString() }} | {{ game.game.playedAt | date }} |
| Position | Player | Games won | |
|---|---|---|---|
| {{ $index + 1 }} | {{ player }} | {{ games.length }} |
| Premium | Donor | Amount |
|---|---|---|
| star | {{donation.donor.username}} | {{donation.donations}} |


This is the complete list of moods that you can choose from when posting a journal entry. Parent moods are used to display an emoticon for a mood if the mood does not have its own emoticon. (smiley, etc) Picking a mood is optional when posting a journal entry.
| id | parentmood | title |
|---|---|---|
| {{ mood.id }} | {{ mood.parent }} | {{ mood.title }} |


|
🤴 Dank Domain 👸 the return of Hack & Slash |
||
| · Press to re-connect | ||
| · Read today's The Olde Tavern news | ||
| · loading ... | ||
|
|
||
|
Google Chrome for Android, mobile or desktop can use Install 🏰 DDgame.us… menu option to play game as a fullscreen app |
||
| Any of the Chromium-based browsers work best Microsoft Internet Explorer is no longer supported |
||
|
Come visit us on Facebook |
🇺🇸 © 2017 - 2023 Robert Hurst |


Computer Engineering Notes
Alex's part
Table of Contents
- 1. assembly
- 1.1. MIPS
- 1.2. memory
- 1.3. MIPS Arithmetic operations (r-format)
- 1.4. MIPS immediate (i-typed) instructions
- 1.5. MIPS j-type instructions
- 1.6. operations
- 1.7. branch instructions
- 1.8. signed vs. unsigned comparison
- 1.9. 32 bit constants
- 1.10. pseudo-instructions (assembler instruction)
- 1.11. memory layout
- 1.12. procedure calling
- 2. Data-path
- 3. Pipe-lining
- 4. performance
- 5. Toolchain
- 6. operating system
- 7. Interface
- 8. Parallelism
1 assembly
1.1 MIPS
MIPS register 0 ($zero) is constant 0 this can be useful to make design more compact add $t2, $s1, $zero # copy from $s1 to $t2, eliminate the copy command
1.2 memory
byte addressed, aligned by words (4bytes or 32bits usually). this architecture require operator
- Load values from memory into registers
- Store result from register to memory
1.3 MIPS Arithmetic operations (r-format)
operator operand1, operand2, operand3 # a = b + c
| op | rs | rt | rd | shamt | funct |
| 6bits | 5bits | 5bits | 5bits | 5bits | 6bits |
rs: a source register rt: a source register rd: a destination register shamt: shift amount (only used in shift operations) funct: function code (extends opcode) defined what operation should be run more information can be found about MIPS as an example
1.3.1 Design principle: simplicity favours regularity
1.4 MIPS immediate (i-typed) instructions
addi $s3, $s3, 4
| op | rs | rt | constant or address |
| 6bits | 5bits | 5bits | 16bits |
op: operator rt: destination or source register number constant: -2^15 to +2^15-1
1.4.1 design principle: Good design demands good compromises
1.5 MIPS j-type instructions
| op | address |
| 6bits | 26bits |
j for jump
1.6 operations
1.6.1 logical
1.6.2 shift
1.7 branch instructions
1.7.1 branch if equal - beq rs, rt, L1
1.7.2 branch if not equal - bne rs, rt, L1
1.7.3 unconditional jump - j L1
1.7.4 design
why not blt bge hardware slower for ≥, > slower than =, ≠
- this mean more work require per instruction, require a slower clock
- all instruction penalised
beq and bne are the common case good design compromise
1.8 signed vs. unsigned comparison
signed comparison slt, slti unsigned comparison sltu, sltui
1.9 32 bit constants
lui rt, constant copies 16 bit constant to the left 16 bits of rt
1.10 pseudo-instructions (assembler instruction)
1.11 memory layout
- stack and dynamic data
- stack procedure (call) frame: saved register, saved argument, local argument local arguments
- dynamic data, heap malloc
- static data
- text
- reserved
1.12 procedure calling
1.12.1 instructions
- call: jal ProcedureeLabel
- address of following instruction put in $ra
- jumps to target address
- return: jr $ra
- copy $ra to the program counter
- can also be used for computed jumps
1.12.2 leaf and non leaf
leaf is non-recursive
2 Data-path
PC -> instruction memory, fetch instruction register numbers -> register file, read registers ALU calculate
- arithmetic computation
- memory address for load/store
- branch target address
elements that
2.1 r-format instruction
read two register operands perform arithmetic/logical operation write result back to register
2.2 load/store instructions
read register operands calculate address using 16-bit offset, which is signed extended to 32-bits to align with the addresses that are 32 bits load: read memory and update register store: write register value to memory
2.3 branch instructions
read register operands compare operands
- use ALU, subtract and check zero output
calculate target address
- sign extend displacement
- shift left 2 places
- add to pc + 4
- already calculated by instruction fetch
2.4 each data-path element can only do one function at a time
2.5 implement jumps
jump use word address update pc with concatenation of
- top 4 bits of old pc
- 26 bit jump address
- 00, zeros padding in the end
extra control signal to indicate this is a jump signal
2.6 data-path operation
- inst. fetch (IF) read next instruction from memory (pointed by PC), store in instruction register (IR)
- inst. decode (ID) setup control signal inc, register addresses, ALU function
- Execute (EX) Use ALU to compute result or address
- Memory (MEM) access memory (read or write), if applicable
- Write back (WB) write result of function back to register, if applicable
2.7 performance of single-cycle processor
performance of single-cycle processor constrained by slowest instruction
2.7.1 variable frequency clock
give each instruction an optimum time
2.7.2 performance issues
longest delay determine clock period
- critical path: load instruction
- instruction memory -> register file -> ALU -> Data memory -> register file
2.7.3 improve performance
multi-cycle pipelining
2.8 units used
| inst. | instruction fetch | register access | alu | reg/mem access |
| r-type | x | |||
| load | x | |||
| store | x | |||
| load | ||||
| load |
2.9 multi-cycle data-path
can skip phases (since some instruction doesn't require mem write for example)
2.9.1 different clock cycles
by separating data-path operation into different clock cycles, incrementing the pc and arithmetic operations can use the same ALU, thus eliminating extra hardware(ALU)
2.9.2 unified memory
one unified memory for program instruction and data via a 2-to-1 mux for accessing instructions or data.
2.9.3 intermediate registers
intermediate registers to store the results of functional unit for a later clock cycle, otherwise results maybe over-writen in the next clock cycle
2.9.4 Register write control signals
PC cannot be updated after each cycle introduce PCWrite to control the loading of the PC introduce IRWrite, write signal for writing to the register
3 Pipe-lining
bringing parallelism into program execution
3.1 pipe-line stages
- inst. fetch (IF) read next instruction from memory (pointed by PC)
- inst. decode (ID) setup control signal inc, register addresses, ALU function
- Execute (EX) Use ALU to compute result or address
- Memory (MEM) access memory (read or write), if applicable
- Write back (WB) write result of function back to register, if applicable
3.2 data-path
cannot be implemented on top of multi-cycle data-path, since there have shared resources. Therefore use single-cycle data-path. With registers separating the data-path into various stages
3.3 speedup
if all stages are balanced time between instructions_pipelined = Time between instructions_pipelined / Number of stages
3.4 limitations
not all instructions require all pipeline stages overheads of filling / empty pipelines dependencies between instructions have to set clock for slowest stage in pipeline
3.5 pipeline control
decode instructions into control signal via the control block
- write back
- memory access
- execute
some signals are passed down until reaching the stages where the signals are required
3.6 hazard
3 type of hazard, where situations that prevent starting the next instructions in the next cycle
- Structure hazard, relatively rare
- Conflict for use of a resource a required resource is busy, e.g. memory is shared between two instructions
- in a constrained MIPS pipeline with a single memory for both data/instructions:
- load/store requires data access
- instruction fetch would have to stall for that cycle
- would cause a pipeline "bubble"
- Hence, pipelined data-paths require separate instruction/data memories
- or, at least, separate instruction/data caches
Data hazard, An instruction depends on complete of data access by previous instruction
add $s0, $t0, $t1 sub $t2, $s0, $t3
where $s0 is a dependency between the two instruction
- Control hazard, control action depends on previous instruction
hazards will stall the pipeline, effectively wasting a cycle. Known as a "bubble"
3.7 stalling pipeline
- force control values in ID/EX register to 0: causes subsequent stages, EX, MEM and WB do nop
prevent update of PC and IF/ID register
- current instruction is decoded again
- following instructions is fetched again
- 1-cycle stall allows MEM to read data for 1w…
can subsequently forward to EX stage
3.8 forward
Use result when it is computed
- don't wait for it to be stored in a register
- requires extra connections in the data-path
forward the previous computation to the next instruction stage where it would requires it
Load-use data hazard Can't avoid stalls by forwarding
lw $s0, 20($1) sub $t2, $s0, $t3
- Data forward
- result available at the end of EX phase (in pipeline register)
- no need to wait untiul WB phase
- add extra logic to feed this result back to ALU inputs
- if hazard detected, logic selects forwarded ALU inputs, discarding erroneous register value
- can also forward result from MEM stages
- either value fetched from memory, or
- ALU result passed on from previous clock cycle
- result available at the end of EX phase (in pipeline register)
Data Hazards in ALU instructions ALU instructions, for example
sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2)
this hazard can be resolved with following
- how do we detect hazards with forwarding?
3.8.1 detecting the need to forward
- pass register numbers lalong pipeline
- e.g, ID/EX, register Rs = register number for Rs sitting in ID/EX pipeline register
- ALU operand register numbers in EX stage are given by
- ID/EX, register Rs, ID/EX. RegisterRt
Data hazards when Forward from EX/MEM pipeline reg
- EX/MEM RegisterRd = ID/EX.RegisterRs
- EX/MEM RegisterRd = ID/EX.RegisterRt
Forward from MEM/WB pipeline reg
- MEM/WB RegisterRd = ID/EX.RegisterRs
- MEM/WB RegisterRd = ID/EX.RegisterRt
- Detect the need to forward
- But only if forwarding instruction will write to a register
- EX/MEM.RegWrite, MEM/WB.RegWrite
- But only if forwarding instruction will write to a register
- And only if Rd for that instruction is not $zero
- EX/MEM.RegisterRd ≠ 0,
- MEM/WB.RegisterRd ≠ 0
3.8.2 double data hazard
add $1,$1,$2 add $1,$1,$3 add $1,$1,$4
both hazard occur, want to use the most recent revise MEM hazard condition, only forward if EX hazard condition isn't true
- revised forwarding condition
MEM hazard
- if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0) and not (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0) and (EX/MEM.RegisterRd = ID/EX.RegisterRs)) and (MEM/WB.RegisterRd = ID/EX.RegisterRs)) ForwardA = 01
- if (MEM/WB.RegWrite and (MEM/WB.RegisterRd ≠ 0) and not (EX/MEM.RegWrite and (EX/MEM.RegisterRd ≠ 0) and (EX/MEM.RegisterRd = ID/EX.RegisterRt)) and (MEM/WB.RegisterRd = ID/EX.RegisterRt)) ForwardB = 01
3.8.3 Load-use hazard detection
check when using instruction is decoded in ID stage
- ALU operands register numbers in ID stage are given by
- IF/ID.RegisterRs, IF/ID.RegisterRt
- Load-use hazard when
- ID/EX.MemRead and ((ID/EX.RegisterRt = IF/ID.RegisterRs) or (ID/EX.registerRt = IF/ID.RegisterRt))
- if detected, stall and insert bubble
4 performance
4.1 Amdahl's law
the law of diminishing return T_improved = T_unafected + T_affected / (improvement factor)
4.2 profiling
gprof to profile program performance -pg option compiles instrumented code
4.3 benchmark
performance comparison between programs cheating! SAMSUNG case study
4.3.1 standards
SPEC CPU benchmark using geometric mean
4.4 power
power = capacitive load * voltage^2 * frequency
4.4.1 power benchmark
4.4.2 power wall
voltage can't be reduced further capacitive laod is difficult to reduce NexT improvement with parrelleism
5 Toolchain
5.1 meaning of toolchain
Toolchain- a set of sotware development tools that are linked together. transforming source code into executables
5.2 avr toolchain
.c compiler .s .s assembler .o .o Libraries linker .elf
5.3 role of each part of chain
5.3.1 assembler
assembly .s file into object files (machine code)
5.3.2 Object copy
.o to .elf file elf": exectuable and linking format
5.3.3 compiler
cross compiler, compiling for another operating system preprocessing, lexical analysis, parsing
5.4 parsing - lexical analysis, syntactic analysis
5.4.1 preprocessing
macro substitution such as conditional processing
5.4.2 lexical analysis
string to tokens
5.4.3 syntactic analysis
checking syntax are correct; decision tree checking with state table for validity checking
5.4.4 sematic parsing
type check
5.5 semantic analysis
context analysis
5.5.1 scope
binding environment
5.6 optimisationn
- aspects execution time program size power consumed
6 operating system
6.1 system hierarchy
- user
- application
- operating system
- hardware
6.2 Operating system
software that manage the computer hardware resources
6.2.1 types of operating system
- multi-user multiple users can use the opreating system time sharing systems/servers
- multi-tasking more than one program can run at the same time pre-emptive/co-operative multi-tasking slotted behavior
- distributed Manage a group of computers to appear as one spread distributed computation across multiple machines
- templated single virtual machine as a guest of an operatin system use in virtualisation/cloud computing
- embedded use on embedded computer system operate with very limited resources
- real-time specialised scheduling algorithms deterministic behaviour quick, predictable respone to events
- single tasking only a single program at a time
- co-operative multitasking (16-bit windows) each process gives time to other processes if one application doesn't return to OS, complete system can hang
- pre-emptive multitasking (32-bit+ windows) os slices CPU time and allocates to programs
6.2.2 operating system shell
User interace for operating system (often graphical) A task in itself interfaces with kernel
6.2.3 Modern desktop Operating Systems
- More reliable unreliable interfaces run in user mode pre-emptive multitasking
- rare failures hardware failure cpu stuck in device driver fatal exception in device derive/kernel
6.3 The kernel
lowest level of the operating system Manages I/O requests from software translates them into data processing instructions for the CPU/other components makes programming easier: acts as a "hardware abstraction layer" meaning programs do not need to be adapted for different hardware
kernel mode: full access user mode: restricted access
6.3.1 drivers
kernel mode: no protection can overwrite resources used by other program most drivers run in kernel mode but some can run in user mode, allow immediate restart of driver
6.4 virtual memory
on disk memory, mostly for compensating for shortage of physical memory by temporarily transferring pages of data from RAM to disk To be accessed by virtual addresses
- translated into a physical address can be sued to access main memory allow efficient sharing of memory between multiple program removes programming burdens of a small limited amount of memory
- A page is a contiguous block of virtual memory
6.4.1 page fault
- When accessed page not present in main memory
- Must be retrieved from disk >1000x slower than accessing main memory can serverly slow down program execution
6.5 super loop
alternative to an OS: super loop, minimum software environment For embedded programs
while (1) { // do something // never return usually }
simple easy to build, debug, test maintain highly efficient minimal hardware resource requirement highly protable
not flexible enough versatile operate at full power all the time, ?device never sleeps
6.6 method
hardware timers(s) to generate interrupts ensure that timers count continuously this will generate 'ticks' at precise intervalsj task: a function executed on a periodic basis for the simpel operating system, this is implemented using functions called from the timer-driven ISR tick generation depends on crystal frequency and counter configuration
6.7 saving power by sleeping
interrupt will wake processor at next timer overflow date for a texas instruments MSP430 processor
| Mode | Current Draw |
|---|---|
| Active | 1.6mA @ 16MHz |
| Standby | 0.4μA |
| Real time clock | 0.25μA |
| Shutdown | 0.02μA |
6.8 Task states
- Running using the processor
- Ready able to run, but a higher/equal-priority task is running
- Blocked waiting for a time (timer task) or external event (pin change),
- Suspended not available for scheduling, not timeout-protected
6.9 Multi Tasking
Tasks are switched between. Multitasking and inter-task communications features of the operating system allow the complex
6.9.1 context switching
saving the registers , before switching the context to a different task
6.9.2 scheduler
decide which task should operate at a particular time
6.9.3 benefits of an Real time operating system (RTOS)
Task scheduling: tasks are called when needed ensuring better program flow and event response. Multitasking: task scheduling gives the illusion of executing a number of tasks simultaneuously Deterministic bahaviour
6.9.4 Real time OS time categories
- strict timing things must happen on a stict schdeule e.g. every 10ms
- flexible timing have a wide range of 'acceptable' reponse time
- Deadline only timing: only 'upper' limit is specified.
6.9.5 Real time applications
6.9.6 Real time OS
Task with higher priority would execute first
6.9.7 RTOS 'Tick'
When sleeping When **
6.9.8 RTOS Context switch
save context by pushing them to task stack
6.10 real time linux
run whole linux os as fully pre-emptive process can use for real-time control capability of
7 Interface
7.1 buses
| characteristic | parallel | serial |
| date rate | low | high |
7.1.1 synchronous vs asynchronous
- synchronous include clokc in control lines, and fixed protocol relative to clock set up for slowest item on the bus SPI bus
- asynchronous handsasking protocol rather than a clock e.g. usb
7.1.2 Synchronous bus
fixed clock frequency, limited by clock frequency MREQ indicate memory being accesed RD asserted for reads, negated for writes
7.1.3 Asynchronous bus
Master asserts MREQ, RD, then MSYN slave starts work when finisehd, asserts SSYN' Master reads data, negates, MREQ', RD' limited by the speed of memory operation
7.1.4 I2C Bus
multi-drop bus protocol
| 1 | 8 | 1 | 1 | 8 | 1 | 8 | 1 | 1 |
| S | Slave address | R/W | ACK | Data | ACK | Data | ACK | p |
7.2 I/O Mapping
7.2.1 I/O Mapping
- Memory mapped I/O Devices and memory share an address space operated the same way as memory AVR MIPS Arm
- dedicated I/O x86 in legacy mode, simple microcontroller separate address space
7.2.2 interfacing
7.2.3 I/O command
- cpu issues address identify hardware
- cpu issues command more
- read/write
7.2.4 I/O Interface type
- programmed (polling) Simplest form, continuously polling I/O system for change completely occupies the computer
- interrupt dirven more efficient, interrupt sequence of instruction via an external signal
- Direct Memory Access most efficient control of transfer is delegated to a DMA controller CPU not involved in transfer but cycles 'stolen'
- Programmed I/o
- CPU has direct control over I/O sensing status read/write commands transferring data
- CPU requests I/O operation
- I/O hardware
- Interrupt-driven I/O
- Overcome CPU waiting
- no repated CPU checking of device (polling)
- interrupt vector
- hardware poll interrupt acknowledge sent interrupting hardware places vector on bus cpu usese vector to identify handler rontine interruption jump table
- Multiple interrupts interrupting an interrupt depends on the system, priority implementation reentrant if can have multiple interrupts software enable interrupts again allows ISR to be interrupted
- DMA
using peripherals peripherals use less current htan CPU delegating control allows CPU to shutdown intelligent peripherals are more capable: better opportunity for CPU shut down can be configured for repetitive data handling, increasing throughout
- DMA transfer setup
- processor sets up DMA supplies device ID, operation to perform, memory address of source/destination
- DMA starts operation on device Arbitrates for interconnect, when data available, it transfers it. DMA controller generates addresses
- Once DMA complete, interrupts processor processor can interrogate DMA device/memory
- DMA transfer setup
8 Parallelism
8.1 Multi-core system
8.1.1 Clock speed
Clock speed hasn't been improved reliable in recent years. Power dissipation. Development towards to multi-core machines
8.1.2 Multi-core
More than one processors. This differs from multi-processing, which multiple processes can run "simultaneously"
8.2 Parrallel processing performance
8.2.1 Amdahl's Law
Sequential code limits speed-up 100 processors, find out the sequential ratio X of the code to obtain Y times speedup:
\begin{align*} T_{\text{new}} &= T_{\text{parallelisable}} / 100 + T_{\text{sequential}} \\ \text{Speedup} &= \frac{1}{(1 - F_{\text{parallelisable}}) + F_{\text{parallelizable}/100}} = Y \\ \end{align*}
Solve for \(F_{\text{parallelisable}}\), where \(X = 1 - F_{\text{parallelisable}}\)
Therefore would need sequential part to be (X/100)%
of original code
8.2.2 Scheduling
Takes time to setup
8.2.3 Work paritioning
To maximize the efficiency, task would need to be broken down into equal-sized peices.
8.2.4 Synchronisation
Dependency between sub-tasks Sequential code limits speed-up
8.2.5 Communication overhead
Context switching overhead Communication between processors introduces overhead
8.3 Scaling
8.3.1 example 1
Wordload: sum of 10 scalars and 10×10 matrix sum Assume load can be balanced across processors Total number of operations: \(10 + 10\times10 = 110\) ( Speed up from 10 to 100 proecssors )
single processor time:
\begin{equation*} \text{Time} = (10 + 100) \times t_{\text{add}} \end{equation*}10 processors
\begin{align*} t = 10 \times t_{\text{add}} + \frac{100}{10} \times t_{\text{add}} = 20 \times t_{\text{add}} \\ \text{Speedup} = \frac{110}{20} = 5.5 (55\% \text{ of potential}) \end{align*}100 processors
\begin{align*} t = 10 \times t_{\text{add}} + 100/100 \times t_{\text{add}} = 11 \times t_{\text{add}} \\ \text{Speedup} = 110/11 = 10 (10\% \text{ of potential}) \end{align*}
8.3.2 example 2
Wordload: sum of 10 scalars and 100×100 matrix sum Assume load can be balanced across processors Total number of operations: \(10 + 100\times100 = 10010\)
single processor time:
\begin{equation*} \text{Time} = 10 \times t_{\text{add}} + 10000/10 \times t_{\text{add}} \end{equation*}10 processors
\begin{equation*} t = 10 \times t_{\text{add}} + 10000/10 \times t_{\text{add}} = 1010 \times t_{\text{add}} \\ \text{Speedup} = 10010/1010 = 9.9 (99\% \text{ of potential}) \end{equation*}100 processors
\begin{align*} t = 10 \times t_{\text{add}} + 10000/100 \times t_{\text{add}} = 110 \times t_{\text{add}} \\ \text{Speedup} = 10010/110 = 91 (91\% \text{ of potential}) \end{align*}
8.3.3 type of scaling
For size of problem: M is working set in main memory P is number of processors
- Memory per processor for strong scaling = M/p
- Memory per processor for weak scaling = M
8.4 Threads
A thread is the samllest sequences of code that can be managed independently by the OS scheduler A thread is part of a process Proces is broken down into threads: easier to handle for parallel processing Single processor:
- Time-division multiplexing, uses context switching to swap between threads
- Gives illusion of multitasking
Multi processes/multi-core Can be truly concurrent, if there are enough cores Each processor could execute a separate thread
8.4.1 Scheduling Thread Execution
- Coarse-grained multithreading: switch threads only on costly stalls (e.g. cache misses)
- Relieves need to switch threas quickly
- However, limited ability to overcome throughput losses, especially from shorter stalls
This is due to high pipeline start-up costs When a stall is encountered, pipeline must be emptied/frozen: next instruction must fill pipeline before continuing.
- Fine-grained multithreading: switch threads on each instruction - interleaved execution of multiple threads
often round-robin, skips stalled threads Processor can switch threads on each clock cycles advantage: hides delays causes by stalled, by executing other tasks Disadvantage individual threads slowed down, as delayed by execution of other threads.
- Simultaneous multithreading (SMT): variations on hardware mutlithreading
Exploits instruction-level parallelism Uses resources of multiple-issue, dynamically-scheduled pipeline processor Always executes instructions from multiple threads; processor associates instructin slots and renamed registers with 'proper' threads.
8.5 Graphics Processing Units (GPUs)
8.5.1 CPU task Parallelism
- Multiple tasks map to multiple threads
- Task runs different instructions
- 10s of relatively heavy weight threads run on 10s of cores
- Each thread managed and scheduled explicitly
- Each thread has to be individually programmed.
8.5.2 GPU data parallelism
- SIMD (single instruction multiple data Model
- Same instruction on different data
- 10,000s of lightweight threads on 100s of cores
- Threads managed / scheduled by hardware
- Programming done for batches of threads (e.g. one pixel shader per group of pixels)
8.5.3 History
- Early video cards Frame buffer memory with address generation for video output
- 3D graphic processing Originally hihg end computer Moore's Law → lower cost, higher density 3D graphics cards for PCs and game consoles
- Graphcis Processing Units Processors oriented 3D gprahics tasks Vertex/pixel processing, shading, texture mapping, rasterization
8.5.4 GPU Architectures
- Processing is highly data-parallel Use thread switching to hide memory latency Less reliance on multi-level caches Graphics memory is wide and high-bandwidth
- Trend toward general purpose GPUs Heterogeneous CPU/GPU system CPU for sequential code, GPU for parallel code
- GPU-specific programming languages/APIs DirectX, OpenGL
8.5.5 Stream Processing
Given a (typically large) set of data: "stream" Run the same series of operations (e.g. "shader") on all of the data (SIMD) CPUs use various optimizations to improve throughout:
- on-chip memeory and local caches: reduces bandwidth to external memory
- Batch groups of threads to minimise incoherent memory access
- Eliminate unnecessary operations by exiting or killing threads (e.g. for pixels that won't be displayed)
8.5.6 GPU computation
GPUs can be difficult to use with graphics API/language Development of C-like language for CPU computation.
8.6 Digital Signal Processers (DSPs)
DSPs are Microprocessors Throughput more important than accuracy
- Generally Harvard architecture (separate pathways for program and data)
- Saturating arithmetic ('clamped' to min/max)
- pipelined CPU
Extra/different instructions and hardware
- multiply accumulate
- modulo-n arithmetic
- fixed point arithmetic
- Built-in lookup tables
- FFT (fast Fourier Transform) support
- Multiple memory access ( fetch two operands), store result
8.6.1 Application
- Real-time applications
- Calculation time must be predictable
- throwing.handling software is not an option!
- The result will be used whatever it is
- Saturating arithmetic is usually fixed point or integer, but ca nbe floating point
- Whatever, it prepresents a closed group
- Underflow -> 0 (if unsigned)
- Overflow -> whatever the largest legal representation is
- No concept of NaN (not a number)
- Whatever, it prepresents a closed group
- usually all rounding modes (to force wide accumulators into narrower words) are supported
8.6.2 Example
Multiply accumulate and increment consider \(y(n) = \sum_{k=0}^{37}b(k)x(n-k)\)
t0=0 k=0 t1=b[k] t2=n-k
8.6.3 Fixed-point arithmetic
Taking samples from the real world. Inputs are frequently from an ADC fixed width, fixed dynamic range Fixed point arithmetic Integer with an implied decimal point Floating point not needed underflow -> saturating arithmetic if higher precision is needed, double the word length
8.6.4 Linear Vs. Circular Buffers
Linear buffer requires manual data movement, circular buffer moves pointer through data Hardware support for circular buffer pointers, and sometimes linear buffers in on-chip memory
8.6.5 Software development
DSPs are microcontrollers designed with an emphasis on speed rather than accuracy/complexity e.g. exploit fixed-point arithmetic So, fast computation e.g. hardware support for more complex operations mulktiple instructions can be rolled up into one Also hardware suppport for manipulating pointers e.g. for circular buffers


Diary note of me ~ for sure!
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.


§412:9-308 Repayment terms. Nothing in this article shall prohibit loans with a demand feature, including but not limited to a single payment demand loan. [L 1993, c 350, pt of §1]


{% extends "base.html" %} {% block content %}
To create a list of elements, input every next list item between symbols:
{{ cell_parse_symbol }}
To create a table, you need to input each separate cell between symbols:
{{ cell_parse_symbol }}
and then every separate row between symbols:
{{ row_parse_symbol }}


Reckless Offense
Those who follow the way of the Berserkir fight with the mind of an enraged animal, and will forego the tactical subtleties of a shield to wildly attack with weapons in both hands. {^n}{^y}Allows and requires dual wielding.
Dual Wield Only, Sword, Axe, Mace, Thrown Weapon
${value}% Chance to be Used
4 6 7 9 10 12 13 15 16 18 19 21 22 24 25 27
Launches ${value} Projectile(s)
1
+${value}% Total Damage
100
MaxLevel
12
UltimateLevel
16