Wendland Marathon
Liepe GER
Race Winners
(24 runnings)
16 Oct
2011 17 Oct
2010 18 Oct
2009
19 Oct
2008
21 Oct
2007
15 Oct
2006
16 Oct
2005
17 Oct
2004
19 Oct
2003
20 Oct
2002
21 Oct
2001
22 Oct 2000
24 Oct 1999
25 Oct 1998
26 Oct 1997
27 Oct 1996
22 Oct 1995
23 Oct 1994
24 Oct
1993
Notes: 1993 was the inaugural year.
16 Oct
2016
2:56:50
Carsten Horn-6
3:48:13
Nele-Maya Fahnenbruck (GER)
18 Oct
2015
2:55:49
Mischa Müller (GER)
4:02:19
Verena Wegener (GER)
19 Oct
2014
2:54:53
Carsten Horn-5
3:57:20
Annina Jürgensen (GER)
20 Oct
2013
2:52:12
Carsten Horn-4
4:31:34
Ingrid Gangloff (GER)
21 Oct
2012
2:53:30
Klaus Goldammer (GER)
4:13:45
Marle Ellerhausen (GER)
2:54:31
Carsten Horn-3
3:48:13
Franziska Lechner (GER)
2:51:21
Carsten Horn-2
4:19:24
Anneke Heuer (GER)
2:54:57
Carsten Horn (GER)
4:23:13
Heike Nöske
(GER)
2:58:15
Ulrich Jaacks (GER)
3:31:50
Cornelia Heinze-2
3:06:24
Frank Bockelmann (GER)
3:53:59
Silvia Behn (GER)
3:01:35
Sven Freudenthal (GER)
3:23:46
Cornelia Heinze (GER)
2:41:40
Frank Themsen (GER)
3:46:52
Marion Lippe (GER)
2:57:41
Jörg Reckewell (GER)
3:51:07
Gisela Maubach (GER)
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
---
n/a
Most Wins
(1993-date)
Men
6
Carsten Horn (GER)
2009-11,2013-14,2016
Women
2
Cornelia Heinze (GER)
2006,2008
Prize Money
No information on prize money has been received for this race.
Race Time Bias
Insufficient data to calculate the race time bias.
Competitive Level
Insufficient data to calculate the competitive level.
Quality Performances
Men
No men under 2:20
Women No women under 2:50
Last Updated on 24 Nov 2016
Contributors: Juraj Gasparovic (26), Klaas Loonstra (40)


TKO Match Officials Lauded!
by Soccer LadumaThe match officials from the weekend’s Telkom Knockout semi-finals have been lauded by the South African Football Association’s referees department.
Mamelodi Sundowns and Maritzburg United will play in the final of the TKO after they defeated Golden Arrows and Kaizer Chiefs respectively.
Read: Sirino Could Miss Final If Fixture Postponed…
SAFA head of referees, Tenda Masikhwa, lauded the officials for the way they handled the two matches.
“We are glad with the continued good quality display by officials. This is what we expect at this level,” said Masikhwa, as quoted on SAFA’s official website.
Read: Motaung Apologises For Chiefs’ ‘Shocking Performance’
“On Saturday (23 November), it was pleasing to watch the first semi-final match between Golden Arrows vs Mamelodi Sundowns. We are also glad that players were disciplined and respected match officials’ decisions. Victor Gomes, Zakhele Siwela, Emmanuel De Sani, Eugene Mdluli and Match Commissioner Johnny du Toit have shown that psychological preparedness for matches makes officiating a pleasant experience,” he added.
Read – Pitso: The Trophy Is In Chloorkop!
“Those who officiated on Sunday’s other semi-final match between Kaizer Chiefs vs Maritzburg United at Mbombela Stadium, seemed to have vowed to maintain the same, if not better, level of good officiating displayed on Saturday. The match was flowing and I want to praise Luxolo Badi, who is one of our up-and-coming referees, Elphas Sitole, Kenny Mamegwa, Sandile Dilikane and Match Commissioner Jabu Nzima for the professionalism in which they handled the match on Sunday,” he said.


Best Christmas gift ideas 2019: A guide to the top presents for your wish list this year
by Precious AdesinaYou've been so busy thinking about what to get other people that you've completely forgotten to think about yourself and now everyone's wondering what you want and you're out of Christmas list ideas. Life can be hard sometimes.
And, of course, you can't just say any old gift you'd prefer; you have to tailor what you want to suit the person asking. You can't really ask your mum and your other half for the exact same item... unless you want two.
So, here's a comprehensive list of 2019 Christmas gift ideas tailored to all the various relationships you have in your life - for both men and women. From close family members to that stranger at work who picked your name out of hat and in a blind panic just went for it and asked you what you wanted.
Men
What to ask for from your significant other...
Looking for something romantic? Read our handy guide on best Christmas gifts for your partner.
1. Smythson Burlington A4 Leather Writing Folder
You'll be sure to impress when you whip this out at your next important meeting. In soft leather with a zip fastening, it's elegant and practical and they can't fail to take you seriously.
2. AllSaints Raven Cuffed Tracksuit Bottoms
Let's be honest here, you need new jogging bottoms anyway and these ones are definitely so much more attractive than your scraggy old ones...
3. Orient Analogue Automatic FAA02009D9
Orient consistently offers some of the best value in inexpensive mechanical watches since the company began in the 1950s. You'll never be late again.
What to ask for from your parents...
Read our handy guide on the best Christmas gifts for him this year.
4. J.Crew Mélange Cotton-Jersey Sweater
Mums love to buy their children cosy knits. It's just a fact. So guide her away from the patterned jumpers of your nightmares and towards this simple sweater by J. Crew.
5. Personalised Song Lyric Print
£12.75, Not On The High Street
Whether you're into Abba, Bowie, The Stone Roses or Run D.M.C., ask for your favourite lyrics to be commemorated in a print you can hang proudly on your wall. Plus, it'll remind your parents of all those times they told you to turn your music down. Good times.
6. Menaji The Ultimate Cover Up Kit
The ultimate men's cosmetic kit to leave your skin with a flawless finish. Use the scrub to revive your skin, use the stick to get rid of eye shadow, skin blemishes and pigmentation and the powder to blot out excess oils.
What to ask for from your parents-in-law...
Even if you've got a great relationship with your in-laws, it's a never ending mission to prove you're good enough for their child, so help them believe the hype by asking for something cerebral-sounding for Christmas. We suggest a subscription to one of the below:
7. Lutyens & Rubenstein Book Subscription
From £40, Lutyens & Rubenstein
These books come beautifully wrapped and are carefully chosen each month to suit the subscriber. So, if you have a penchant for a particular genre, that can be accommodated for.
8. The New Yorker
Receive the gift of high quality journalism with a New Yorker subscription.
9. The Economist
The Economist isn't for financiers alone, there's something in there for everyone, whether its books, world news, or business you love.
10. The Telegraph Custom Gift Book
From £50, The Telegraph Bookshop
Treat them to our Custom Gift Book. Containing every front page of The Telegraph from a special date in the recipient's life, this bespoke gift is a custom-made journey back in time.
Read our guide on the best Christmas gifts for dad.
What to ask for from your brother or sister-in-law...
11. Must I Repeat Myself? Unpublished Letters To The Daily Telegraph
£9.99 or 2 for £16, Telegraph Book Store
Wry observations, wit and bafflement from the Telegraph's readers. Sure to inspire a laugh or two over the long days between Christmas and New Year.
12. Fortnum & Mason The Port Pairing Box
A Christmas gift to be shared with your extended brood. Perfect for oiling the wheels of familial love. Despite their smaller size, each of these ports pack a powerful punch.
What to ask for from your siblings...
13. Salcombe Brewery Brew Day
Join in with the brewing process, enjoy some samples in the bar and indulge in a pasty and a pint at lunchtime. Maybe you could also buy this for your sibling and go together. Brewery bonding here you come.
14. Sunspel Classic White T-shirt
Sunspel make the best T-shirts in the softest cotton, so ask for one in every colour if you so wish. Best of all, this will work with absolutely everything.
15. The Monocle Guide To better Living
A truly useful guide for how to do life better. If you were a millennial you'd say #livingmybestlife after reading it. A book that is both informative and entertaining.
What to ask for from your kids..
Read our guide on the best Christmas gifts for kids.
16. Happy Socks x Andy Warhol Banana Socks
Younger children with a bit of pocket money will love the thought of their old pa wearing these rather fantastic socks. Just don't forget to actually wear them.
17. Dopper Sunshine Yellow Water Bottle
Teenagers will appreciate you getting into the reusable way of life and this stylish design in bright yellow is just a bit cooler than your average.
18. KreaFunk aFunk 360 Degrees Bluetooth Speaker
If your kids are actual grown ups with jobs and everything, they won't mind spending a bit more on this sleek Bluetooth speaker.
What to ask for from friends or extended family...
19. School of Life Sceptical Notebook
If your secret Santa is actually not so secret ask them for a gift you'll actual use, like this notebook. Inside is an image of Untitled, 1970 by Cy Twombly.
Looking for more inspiration? Read our guide on funny present ideas and unique Christmas gifts.
Women
What to ask for from your significant other...
Read our Christmas guide on best gifts for her.
20. La Perla Tres Souple Lace-trimmed Bra and Briefs
£95 and £58, MATCHESFASHION.COM
In our humble opinion women want to feel cherished and desired and the gift of some romantic lingerie can achieve just that. But we don't want bright red synthetic nonsense with more straps than we know what to do with, so refer your beloved to this lush lace set by La Perla for inspiration.
21. Horizn Studios Gion Backpack
Channel that Christmas lights look with the Horizn Studios Gion Backpack in Cosmic Halo. Not only will heads turn whenever you enter a room, but you'll be able to sleep at night knowing that your bag uses an animal-friendly vegan Hi-Core shell.
22. Sandro Leather Tailored Jacket
Jackets are essential but expensive. So get your other half to invest in it for you. This leather tailored jacket by Sandro is amazing so drop some heavy hints. Style for life.
23. Dorchester Collection Spa Day: Love Is... (for two)
from £530 (for two), Dorchester Collection
Some things are supposed to be shared. Why not ask to enjoy a relaxing day of being pampered with your partner. The day includes an hour long massage and a choice of facials.
24. Missoma Gold Leaf Choker
Jewellery is always welcome and Missoma manages to be cool, not too pricey and just really, really gorgeous. And if you didn't know, it's all about layering your necklaces right now so ask for this choker which you can wear alongside your favourite pendants.
25. Jabra Elite 65t True Wireless Bluetooth Earbuds
You know you're killing it on your runs and work out sessions so ask for some earbuds that will actually stay in your ears... A simple thing which will change your life come the inevitable January work-outs.
What to ask for from your parents-in-law...
Read our guide on the best Christmas gifts for mums.
26. Antonia Burrell Revive Repair & Restore Collection
This is a brilliant gift and will help stimulate your skin, restore radiance and deal with dark spots and blemishes. It's a yes from us.
27. Jo Malone Candle
A plush candle is basic but never boring. It's an easy but luxurious option for your in-laws and you won't even have to pretend to like it.
What to ask for from your brother or sister-in-law...
28. Le Specs Rapture cat-eye acetate sunglasses
Le Specs is one of those brands that looks way more luxe than the price suggests.  Perfect for hiding the effects of the night before.
29. John Lewis & Partners Cashmere Scarf
Cashmere, stylish, and cosy, cosy cosy... and, there are also nine beautiful colour for them to pick from which still adds a little bit of surprise to what you may be getting.
What to ask for from your siblings...
30. Scamp & Dude Isadora Swag Bag
It's probably about time you updated that musty old make-up bag, so this little number is just the thing. And the brand is called Scamp & Dude so...
31. & Other Stories Alpaca Blend Knit Sweater
Frothy like candy floss, this knit will make your winter wardrobe just that bit more fun. And if your siblings have a history of buying you slightly dodgy clothes from the labels they love (but which you wouldn't be seen dead in), then this will put a stop to that.
32. Cindy Sherman (Hardcover)
Even if you missed the exhibition on renowned photographer Cindy Sherman at the National Portrait Gallery, you can still have an extensive look at her oeuvre, from her earliest works to her most recent ones with this book.
What to ask for from your kids...
Check out our handy guide on best Christmas gifts for teenagers.
33. The Ritual of Hammam Bath Oil
If you've made it clear to your kids that they stress you out, then suggest they make reparations with this bath oil. "Enriched with nourishing argan oil and invigorating eucalyptus, the oil uses vitamin A as a powerful antioxidant to leave your skin feeling sublimely soft."
34. Liberty London Leather Ianthe Large Notebook
Busy, busy busy. At least your hectic life can be somewhat organised with this Ianthe embossed leather perfect bound large notebook. Even better, it can be personalised. Maybe let them know you'd rather not have 'mum' on the front... or that you'd much prefer it did.
35. Dior Rouge Vernis Couture Colour Long Wear Nail Lacquer
An easy way to update your look, boost your mood and feel a bit glam. And, you'll feel extra special wearing it knowing it came from one of your very own children.
What to ask for from friends or extended family...
For more inspiration, read our guides on the best experience day gifts ideas and top hampers for 2019.
36. Anthropologie Celestial Coaster
Generic but stylish and oh so pretty. If they don't know you that well, then this fits the bill. They also have the option of getting you one, if it's for something like Secret Santa, or many, if they're feeling extra generous. Everyone wins.
37. For the Record (Hardback)
Former Conservative Prime Minister David Cameron touches on the governments he led, his perspective on the EU Referendum and his multifaceted career.
38. Branche d’Olive Boxed Soap
Get an upgrade on your bathroom products with a set of delicious soaps by Branche d'Olive. This box includes one rose bar and one lily of the valley. Gorgeous.
For more Christmas inspiration, read our guides on the best stocking fillers, homemade gifts and present ideas on a budget. You can also find more festive features here.
All the products mentioned in this article are selected independently by our journalists. The Telegraph makes money by adding affiliate links to some of the products.


QUIZ:What Coding Language Should You Learn First?
Do you like Piña Coladas?
Yes
No
...and getting caught in the rain?
Yes
No
I'm a little bit...
Country
Rock & Roll
Neither
When were you born?
Right now I would most like to be...
On a beach
Yodeling on a mountaintop
Skydiving
In my PJs on the couch
Submit my quiz!


| fkSegments reference pages | |
detect_mountains
synopsis
find segments containing peaks
syntax
segs=DETECT_MOUNTAINS(sig)
segs=DETECT_MOUNTAINS(x,sig)
segs=DETECT_MOUNTAINS(...,parm1,val1,...)
description
segs=DETECT_MOUNTAINS(sig) detects mountains in vector sig and returns
the start and end indices.
segs=DETECT_MOUNTAINS(x,sig) detects the mountains in a signal as a
function of x and returns the starts and ends.
segs=DETECT_MOUNTAINS(...,parm1,val1,...) set optional parameters for
mountain detection. Valid parameters are:
- threshold
- threshold, either a single threshold or a lower and a higher threshold. (default = 90% percentile of signal)
- span_interval
- maximum inter-segment interval for combining segments. (default = 0)
- width_lim
- exclude mountains based on width, either a scalar that specifies the lower limit or a two element vector that specifies lower and upper limits. (default = [])
- order
- order of operations, 1=apply upper threshold, 2=apply width limits, 3=combine small intervals. (default = [1 2 3])
The general procedure is as follows:
- find all stretches in the data that are above the lower threshold.
- eliminate mountains that never cross the upper threshold (if exists)
- eliminate mountains that are either too wide or too narrow.
- combine mountains that are close together
| seg_sort | Toolbox page | inseg |


Click "MY PROFILE" to return to the "about me" page. Also below "MY PROFILE", you will find some of the projects, several unfinished, that I've been working on. Please click the different ones below (listed in no particular order) to see some of my progress.
In another Epicodus lesson, we learned about using floats. Please see this page, which is the reference to this lesson. Some uses of floats include:
In this "animal shelter" example website, I designed a page with three columms for three different dogs. This was made to display the power of using columns and being able to change the background colors of the columns accordingly. I also used CSS to make the images and the names of the animals uniform to each other.
Additionally please see the following links for both the Github page, and its respective repository.


Hi, I'm Walt Venable, and I have two boys in college of whom I'm very proud, Forrest and Joshua. I live in beautiful Asheville, NC with my fabulous fiance Bernice Penn and our cats Tiger and Snowy. I'm an iPhone/iPad and database programmer and some years back was a designer of geodesic dome models and structures. Geodesic domes were developed and popularized by the late designer R. Buckminster Fuller. They have been used for such spectacular structures as the US Pavilion at the 1967 World's Fair in Montreal, the big aluminum ball at Disney's Epcot Center in Florida, and for countless dome homes and other buildings around the world.
(return to Alternative Engineering main page)


- Keywords:getAllKeywordSet (options)
-
Get set of all keywords.
Parameters:
-
options
: reserved for future.
Return value:
keyword set - keys are lr-keyword objects (values are 'true').
- Keywords:getAllKeywords (options)
-
Get all keywords array.
Parameters:
-
options
: reserved for future.
Return value:
keyword array - values are lr-keyword objects.
- Keywords:getKeywordComponents (keyword, reverse)
-
Get component array given leaf keyword.
Parameters:
-
keyword
: (LrKeyword, required) the keyword to be expressed as component array.
-
reverse
: (boolean, default: false) whether components should be reversed so root is first.
Usage:
it is expected that leaf keyword will be pure/true leaf, but such is not required - it could also be parental keyword.
Return value:
comp (array) will always have at least one keyword - never empty, never nil. leaf will be first component, root will be last - reverse order if desired.
- Keywords:getKeywordForPath (path, options)
-
Refresh display of recently changed photo (externally changed).
Parameters:
Usage:
as of 30/May/2014 18:45, not used in any live plugins of mine, but passed preliminary tests.
- Keywords:getKeywordFromPath (path, permitReinit)
-
Refresh display of recently changed photo (externally changed).
Parameters:
- Keywords:getKeywordPath (keyword, options)
-
Get keyword as path.
Parameters:
-
keyword
: (LrKeyword, required) the keyword to be expressed as path.
-
options
: (table, optional) include format = 'slash', 'Lr5', or 'legacy', as desired - default is 'slash' notation.
Usage:
it is expected that leaf keyword will be pure/true leaf, but such is not required - it could also be parental keyword.
Return value:
path string and comp (array).
- Keywords:getKeywordPaths (keyword, options)
-
Get array of keyword paths (includes synonyms).
Parameters:
-
keyword
: lr-keword object.
-
options
: may include 'format' ('slash' or 'Lr5' or 'legacy') - default is 'slash'.
Return value:
- Keywords:initCache ()
-
Init keyword cache.
Usage:
deprecated (I think) ###2 18/Dec/2013 9:54 (no longer sure why). - still being used in Ottomanic Importer, but maybe only until cut-over (?)
- Keywords:new (t)
-
Constructor for new instance.
Parameters:
-
t
: (table) object initialization table, options:
initInterval ( number, default: 1 ) set to zero to not re-initialized, else seconds for keyword re-init interval.
- Keywords:newClass (t)
-
Constructor for extending class.
Parameters:
- Keywords:parseKeywordString (kwString, options)
-
Parse keyword string info into parallel arrays of resolved keywords and corresponding names/subpaths (having unique counterpart existing in catalog).
Parameters:
-
kwString
: keywords as read from get-formatted-metadata method.
-
options
: may include 'delim' or 'sep'.
Usage:
implementation @19/Dec/2013 6:47 does not return parsed keywords which aren't in the catalog, but maybe should, so they can be created, at least as on option.
Return values:
- keywords (array of LrKeyword objects) - resolved.
- names (parallael array of strings) - resolved.
- message (qualifying message) - will accompany partially keywords/names, but won't accompany if all are resolved.
- other ( table, only if qualifying message ) - members: 'missing', 'ambiguous' (arrays of strings).
- Keywords:startInit (ival)
-
This is generally called once upon init, then continues to re-init forever, or until stopped or shutdown.
Parameters:
Usage:
another option is to start initialization task, and stop it, as desired.
- Keywords:stopInit ()
-
Call this when exiting dialog box that uses initializing keyword object.


Have you ever wondered how the whole Non-Blocking IO thing works? As a web developer, you may have heard of Non-Blocking network libraries and web servers, you may even know what they actually do or probably you have even used them, but do you really know what is going on behind the scene? In this talk, we are going to see how Non-Blocking IO is implemented and understand the concept better.
As an engineer working on any web stack, you may have heard about Blocking and Non-Blocking IO. You may as well have used any framework or library that supports Non-Blocking IO. After all, they are very useful as you don't want to block execution of other tasks while one task is waiting to complete a network call to another service (like HTTP call to an API or may be a TCP call to your database). This also helps us handle a lot more connections than we possibly could with blocking IO. Python supports Non-Blocking IO, but we always use some existing 3rd party library that hides all the gory details and makes it all look like black magic to the uninitiated.
This presentation will be an introductory talk focused at explaining how Non-Blocking IO works, which is the basis of libraries like Gevent, Tornado and Twisted. We will learn about how Non-Blocking IO can be implemented using the most basic modules that form the base for the above mentioned libraries. Hopefully after this talk, Non-Blocking IO will not be an unsolved mystery for you anymore. The topics that we will try to touch upon are:


Japan celebrates New Emperor Naruhito with music and dance
A national festival to celebrate the enthronement of New Japanese Emperor Naruhito was held at the Imperial Palace Square in Tokyo on Saturday.
Events began in the afternoon with a parade of traditional Japanese folk dance groups from around the country and music bands of the Metropolitan Police Department and the Tokyo Fire Department performing.
The second half of the festival takes places in the evening, featuring music performances.
Both Emperor Naruhito and Empress Masako are expected to make an appearance and Prime Minister Shinzo Abe is also scheduled to make a speech.


Application presentations¶
Groups and presentation dates¶
Expectations¶
Each group will be pre-assigned an article seven days before their presentation date. The students will present their article in class the day they’re assigned. Each member of the group will present part of the material. Answers to the following questions will be turned in (printed, with all group member names included):
What is the biological problem that the authors are trying to address?
What is the motivation for addressing this problem?
What previous work has been done in this area? Are there pre-existing tools that address this problem?
What computational technologies did the authors make use of to create this tool (e.g., programming language, databases, etc)?
What preexisting biological resources (e.g., sequence databases) did the authors make use of (if any)?
What is the input to this tool?
What is the output of this tool?
How did the authors test this tool? Was performance benchmarking included in their paper?
How did the authors evaluate whether this tool was giving biologically meaningful results?
Presentations will address these same questions, and will additionally include a live demo of the software where the presenters show/discuss the input data, run the application, and show/discuss the output.
Grading¶
All students in the group will receive the same grade, except in circumstances where it appears that vastly different amounts of effort were contributed by different members of the same group. In addition to being graded by the instructor, anonymous reviews will be turned in by all students - the results of these reviews will factor into each group’s score.


{{ total_results|intcomma }} result{{ total_results|pluralize }} found for {{ query }}
{% else %}No results found. Please try again.
{% endif %} Did you find what you were looking for?Displaying items {{ first_item_number }} - {{ last_item_number }} of {{ total_results }} in total
{{ result.content }}


Pat's Salmon Cookies
Store stock projection app:
Location
Min. Customer
Max. Customer
Average Sales
Add Store Sales Projection


After creating an Aggregator, there are mainly two operations:
For example this is how to create a local database named "mydb" (either new or a pre-existing one):
Database db = DbFactories.localDerby().getOrCreate("mydb");
Now assume we want to benchmark the performance of some virtual cars, according to the cargo they carry as well as the ratio of curves that the road has. Also assume that we want to record the name of the driver that drove the car each time, as well as the time each experiment took place. For convenience, although not strictly necessary, lets create an enumeration of the variables we are interested in:
enum Variables { ELAPSED_TIME, CAR, CARGO, CURVE_RATIO, DRIVER, TIME_OF_DAY }
In this example, ELAPSED_TIME corresponds to the actual experimental measurement, while the rest of the variables simply describe the context in which the experiment took place. It is worth noting though that there is no conceptual difference between the these two kinds of variables. It is entirely reasonable to create a schema which combines multiple variables designated for measurements.
Now lets create an appropriate schema that describes our experiment's data set. We are measuring the elapsed time in nanoseconds (long integer). Cargo is described in kilograms (int), curve ratio is also a double, driver and car names do not exceed 30 characters, and finally the moment each experiment took place is a java.sql.Timestamp:
Schema schema = new Schema(). add(Variables.ELAPSED_TIME, DataTypes.LONG). add(Variables.CAR, DataTypes.string(30)). add(Variables.CARGO, DataTypes.INTEGER). add(Variables.CURVE_RATIO, DataTypes.DOUBLE). add(Variables.DRIVER, DataTypes.string(30)). add(Variables.TIME_OF_DAY, DataTypes.TIMESTAMP);
Important note: Wherever, throughout the Aggregator toolkit, a variable has to be declared, it is irrelevant whether an enum, or another object, or a string is given for it. In all cases, the upper-cased string representation of the passed object is used. "Value", "vALue", an enum Variables.VALUE, or any other object with a toString() method that returns "VALUE" when upper-cased, refer to the same variable. We prefer referring to variables through an enum for safety against accidental typos.
Next, by using this schema, we will direct the database to create a suitable Aggregator:
//This will either create a table "RACING" if there is none, or reuse it if that exists Aggregator aggregator = db.getOrCreate(schema, "racing");Now lets execute the experiment and record our findings:
String[] cars = { "McLaren", "Ferrari", "FIAT" }; String[] drivers = { "Schumacher", "Alonso", "Barrichello" }; int[] cargos = { 10, 40, 70, 100 }; for (String car : cars) { for (String driver : drivers) { for (int cargo : cargos) { //lets run the experiment multiple times to extract safer conclusions for (int repeat = 0; repeat < 100; repeat++) { long elapsedTime = -System.nanoTime(); race(car, driver, cargo); elapsedTime += System.nanoTime(); aggregator.record(new Record() .add(Variables.ELAPSED_TIME, elapsedTime) //measurement .add(Variables.CAR, car) //variables .add(Variables.DRIVER, driver) .add(Variables.CARGO, cargo) .add(Variables.TIME, Utils.now()); } } } }Note that there is no problem storing multiple records with the same set of variable bindings, i.e. repeatedly retest with the same settings; all measurements are independently stored.
Now we can create custom reports of our data. For example, to see the average time per driver, we write:
Records avgTimesPerDriver = aggregator.averageOf(Variables.ELAPSED_TIME).per(Variables.DRIVER); for (Record record : avgTimesPerDriver) { System.out.println(record); String driver = (String)record.get(Variables.DRIVER); double elapsedTime = (Double)record.getValue(); }
Note that we access the value of the aggregation by the Record.getValue() method (which is also equivalent to Record.get(null)).
| Driver | Average Elapsed Time (formatted in seconds) |
|---|---|
| Schumacher | 39.2 |
| Alonso | 39.9 |
| Barrichello | 41.3 |
There are going to be exactly three Record instances reported, all containing a DRIVER key (each record will have a distinct driver name), along with the average time per that driver (as already mentioned, accessed either through Record.getValue() method or by the null key).
As another example, lets find the minimum elapsed time for each distinct driver/car combination. Furthermore, we require the results to come ordered by the driver's name (ascending):
Records minTimesPerDriverAndCar = aggregator. ordered(Orders.asc(Variables.DRIVER)). minOf(Variables.ELAPSED_TIME).per(Variables.DRIVER, Variables.CAR); for (Record record : minTimesPerDriverAndCar) { System.out.println(record); String car = (String)record.get(Variables.CAR); String driver = (String)record.get(Variables.DRIVER); double elapsedTime = (Double)record.getValue(); }
| Car | Driver | Minimum elapsed time |
|---|---|---|
| Alonso | McLaren | 21.5 |
| Alonso | Ferrari | 20.9 |
| Alonso | FIAT | 85.9 |
| Barrichello | McLaren | 22.4 |
| Barrichello | Ferrari | 21.0 |
| Barrichello | FIAT | 79.9 |
| Schumacher | McLaren | 20.5 |
| Schumacher | Ferrari | 20.1 |
| Schumacher | FIAT | 82.6 |
Finally, assume that we want to filter FIAT out from the results, as if we did not use that at all.
Records minTimesPerDriverAndCar = aggregator. filtered(Filters.notEq(Variables.CAR, "FIAT")). ordered(Orders.asc(Variables.DRIVER)). minOf(Variables.ELAPSED_TIME).per(Variables.CAR, Variables.DRIVER); for (Record record : minTimesPerDriverAndCar) { System.out.println(record); String car = (String)record.get(Variables.CAR); String driver = (String)record.get(Variables.DRIVER); double elapsedTime = (Double)record.getValue(); }
| Car | Driver | Minimum elapsed time |
|---|---|---|
| Alonso | McLaren | 21.5 |
| Alonso | Ferrari | 20.9 |
| Barrichello | McLaren | 22.4 |
| Barrichello | Ferrari | 21.0 |
| Schumacher | McLaren | 20.5 |
| Schumacher | Ferrari | 20.1 |
That covers the basic functionality of this library. For creating diagrams out of reported records, see the gr.forth.ics.jbenchy.diagram package.


Stripe Example Form
Your Name
E-mail Address
Card Number
CVC
Expiration
/
Submit
JavaScript is required for the registration form.


Defi Val de Travers Marathon
Couvet SUI
Website: www.defi-vdt.ch/fr
Race Winners
(21 runnings)
16 Jun
2007
26 Aug
2006
19 Aug
2005
20 Aug
2004
22 Aug
2003
17 Aug
2002
24 Aug
2001
18 Aug
2000
20 Aug
1999
1998
1997
1996
Notes: 1996 was the inaugural year. Course is on trails. Also known
as the Trail de 'lAbsinthe. The actual race distance is 41.9 km.
The course is essential a single loop with 1346m total climb, starting at 730 m
MSL with a maximum elevation of 1462 m MSL.
18 Jun
2016
3:18:14.1
Michael Enzmann (SUI)
3:52:00.2
Carole Genoud (SUI)
13 Jun
2015
3:06:39
Jonathan Raya-2
3:38:04
Fanchon Brouillet (SUI)
14 Jun
2014
3:02:39
Jonathan Raya (SUI)
3:22:27
Laurence Yerly-7
15
Jun
2013
3:08:25
Philippe Santschi (SUI)
3:19:09
Laurence Yerly-6
16 Jun
2012
3:04:16
Alexandre Rognon (FRA)
3:22:09
Laurence Yerly-5
18 Jun
2011
3:13:53
Beat Bieri (SUI)
3:20:16
Laurence Yerly-4
19 Jun
2010
3:10:03.8
Vincent Feuz (SUI)
3:19:51.9
Laurence Yerly-3
20 Jun
2009
3:05:10
Marc-Henri Jaunin-3
3:15:11
Laurence Yerly-2
21 Jun
2008
3:06:34.2
Tony Marchand (SUI)
3:25:23.9
Laurence Yerly (SUI)
3:09:57.4
Marc-Henri Jaunin-2
3:43:49.5
Julia Alter-2
2:58:37.5
Peter Gschwend-4
3:19:54.7
Julia Alter (GER)
2:56:31.1
Marc-Henri Jaunin (SUI)
3:34:20.9
Stintje Reulen-2
2:51:08.2
Peter Gschwend-3
3:26:22.2
Stintje Reulen (NED)
2:49:21.6
Peter Gschwend-2
3:31:40.2
Marianne Cuenot-3
2:59:45.5
Francois Glauser (SUI)
3:28:39.2
Mariya Ostrovskaya (UKR)
2:44:06.1
Peter Gschwend (SUI)
3:25:37.3
Marianne Cuenot-2
2:37:47.4
Bruce Kilulai (KEN)
3:33:17.4
Marianne Cuenot (SUI)
2:43:38.7
Haile Korichu (ETH)
3:01:02.6
Emebet Ambossa (ETH)
2:42:58.6
Marc-Henri Jaunin (SUI)
---
n/a
2:53:05.0
Jean-Michel Aubry (SUI)
---
n/a
2:48:09.5
Richard Ferguson (VA/USA)
---
n/a
Most Wins
(1996/date)
Men
4
Peter Gschwend (SUI)
2001,2003-04,2006
Women
7
Laurence Yerly (SUI)
2008-14
Prize Money
(ADR qualified runners)
No information on prize money has been received for this race.
Race Time Bias
(sec/km)
Insufficient data to calculate the race time bias.
Competitive Level
(1990-date)
Insufficient data to calculate the competitive level.
Quality Performances
Men no men under 2:20 Women no women under 2:50
Finishers
Year Men Women M+F 2016 156 2015 129 55 184 2014 2013 111 30 141 2012 2011 78 21 99 2010 83 26 109 2009 2008 82 14 96 2007 59 10 69 2006 67 12 79 2005 59 17 76 2004 85 24 109 2003 117 15 132 2002 112 37 149 2001 128 24 152 2000 142 24 166 1999 149 24 173 1998 1997 1996 Sum 1890 Sums 1401 333 1734 M/F 4.21
Last Updated on 16 Jul 2016
Contributors: Klaas Loonstra (31), Antonin Hejda (2)


Introduction
A programming language is a formal language comprising a set of instructions that produce various kinds of output. Programming languages are used in computer programming to implement algorithms.
Most programming languages consist of instructions for computers. There are programmable machines that use a set of specific instructions, rather than general programming languages. Early ones preceded the invention of the digital computer, the first probably being the automatic flute player described in the 9th century by the brothers Musa in Baghdad, during the Islamic Golden Age. Since the early 1800s, programs have been used to direct the behavior of machines such as Jacquard looms, music boxes and player pianos. The programs for these machines (such as a player piano's scrolls) did not produce different behavior in response to different inputs or conditions.
C# and .NET Framework
We use C# and Microsoft .NET Framework (the platform behind C#) only as means for writing programming code and we do not scrutinize the language’s specifics. This same book can be found in versions for other languages like Java and C++, but the differences are not very significant.
Thousands of different programming languages have been created, and more are being created every year. Many programming languages are written in an imperative form (i.e., as a sequence of operations to perform) while other languages use the declarative form (i.e. the desired result is specified, not how to achieve it).
The C# Programming Language
C# is a modern object-oriented, general-purpose programming language, created and developed by Microsoft together with the .NET platform. There is highly diverse software developed with C# and on the .NET platform: office applications, web applications, websites, desktop applications, mobile applications, games and many others.
C# is a high-level language that is similar to Java and C++ and, to some extent, languages like Delphi, VB.NET and C. All C# programs are objectoriented. They consist of a set of definitions in classes that contain methods and the methods contain the program logic – the instructions which the computer executes
Nowadays C# is one of the most popular programming languages. It is used by millions of developers worldwide. Because C# is developed by Microsoft as part of their modern platform for development and execution of applications, the .NET Framework, the language is widely spread among Microsoft-oriented companies, organizations and individual developers. For better or for worse, as of this book writing, the C# language and the .NET platform are maintained and managed entirely by Microsoft and are not open to third parties. Because of this, all other large software corporations like IBM, Oracle and SAP base their solutions on the Java platform and use Java as their primary language for developing their own software products
Unlike C# and the .NET Framework, the Java language and platform are open-source projects that an entire community of software companies, organizations and individual developers take part in. The standards, the specifications and all the new features in the world of Java are developed by workgroups formed out of the entire Java community, rather than a single company (as the case of C# and .NET Framework).
The Microsoft .NET Framework
The C# language is not distributed as a standalone product – it is a part of the Microsoft .NET Framework platform (pronounced "Microsoft dot net framework"). .NET Framework generally consists of an environment for the development and execution of programs, written in C# or some other language, compatible with .NET (like VB.NET, Managed C++, J# or F#). It consists of:
- the .NET programming languages (C#, VB.NET and others);
- an environment for the execution of managed code (CLR), which executes C# programs in a controlled manner;
- a set of development tools, such as the csc compiler, which turns C# programs into intermediate code (called MSIL) that the CLR can understand;
- a set of standard libraries, like ADO.NET, which allow access to databases (such as MS SQL Server or MySQL) and WCF which connects applications through standard communication frameworks and protocols like HTTP, REST, JSON, SOAP and TCP sockets.
- good software
The .NET Framework is part of every modern Windows distribution and is available in different versions. The latest version can be downloaded and installed from Microsoft’s website. As of this book’s publishing, the latest version of the .NET Framework is 4.5. Windows Vista includes out-of-thebox .NET Framework 2.0, Windows 7 – .NET 3.5 and Windows 8 – .NET 4.5.
Why C#?
There are many reasons why we chose C# for our book. It is a modern programming language, widely spread, used by millions of programmers around the entire world. At the same time C# is a very simple and easy to learn (unlike C and C++). It is natural to start with a language that is suitable for beginners while still widely used in the industry by many large companies, making it one of the most popular programming languages nowadays.
// An ordinary character
char character = 'a';
Console.WriteLine(character);
// Unicode character code in hexadecimal format
character = '\u003A';
Console.WriteLine(character);
// Assigning the single quotiation character (escaped as \')
character = '\'';
Console.WriteLine(character);
// Assigning the backslash character (escaped as \\)
character = '\\';
Console.WriteLine(character);
C# or Java?
Although this can be extensively discussed, it is commonly acknowledged that Java is the most serious competitor to C#. We will not make a comparison between Java and C#, because C# is undisputedly the better,more powerful, richer and just better engineered. But, for the purposes of this book, we have to emphasize that any modern programming language will be sufficient to learn programming and algorithms. We chose C#, because it is easier to learn and is distributed with highly convenient, free integrated development environment (e.g. Visual C# Express Edition).


[t]Dear {$name|escape},[/t]
[t]Thank you for activating your account on Elviria.[/t]
[t]You can now login using your username {$ocdUserName|escape} and the password you have entered during your registration process.[/t]
[t]If you have forgotten your password you can easily retrieve an new one password on our website.[/t]
[t]If you have any questions, please let us know.[/t]
[t]Best regards[/t],
Elviria


Winfrey
and
her untold
from
the
scratch
raise
climbed
up the ladder of
the
society
strict
an
and
religious
this
her
entry
rewards
awards
in her
early
life
was
has
been
racism,
racism and
injustice
became
is
a symbol


Danilo Poccia
Danilo works with startups and companies of any size to support their innovation. In his role as Evangelist at Amazon Web Services, he leverages his experience to help people bring their ideas to life, focusing on serverless architectures and event-driven programming, and on the technical and business impact of machine learning and edge computing. He is the author of AWS Lambda in Action from Manning.
Talk: Diving deep into the event-driven side of serverless
Serverless computing is often described as the interaction of functions with fully-managed services. In this way, you can build applications without having to think about servers. But how do functions and fully-managed services interact? Via events! Events are important for serverless. Event-driven architectures help you to adopt some of the best practices for distributed systems without even realizing it. Let’s see what events and event-driven programming can bring to the table, what we can learn to build better and easier to manage serverless applications.
Back to the agenda


Indian Institute Of Technology Kota
भारतीय सूचना प्रौद्योगिकी संस्थान, कोटा
11 April 2018 / 22:38:43
About Us
Acadmic
Admission
Department
Curriculum
Time table
Institute Library
Institute Event
Institute Scholarship
Central facilities
Vision
Departments
Thought of the Day
- As long as you alive ,keep smile
Portal
Acadmic
Student welfare
Placement
faculty
Mission
Latest News
Events
Student Corner
Internship And Placement
Institute Scholarship
Vidyalaxmi Portal For Education Loan
Notice For Appointment On Deputation Basis
Guest Faculty
IIIT Kota Declared as Institue of National Importance
Orinatation Program
IIIT Kota Events
IIIT Kota celebrated Yoga Day
Swachh Bharat Mission
Swachh Bharat Mission
Program Advisers
Applying for Scholarship
Important note to students
End term time table
links
Institute
people
vacancies
Tender
Contact Us


--- layout: not_homepage quote: Failure will never overtake me if my determination to succeed is strong enough author: --- {% include quote.html quote=page.quote author=page.author %}
I am Shaharyar Shamshi a Programmer and self proclaimed political critics or better to say Anti National according to definition of the Indian media who love to solve the problem applying computer science Skill. I am always eager to work on challenging task which will help me to learn new technology. I had a first intercation with computer science during my undergraduation and believe me it was not love at first sight but eventually I fall for it and now with time there is many fold increase in this love. If you want our love to grow so kindly provide me with the new set of problem otherwise I will fall in love with Badminton or BasketBall
Have a look at my Blogs shoot me an email osr connect on linkedIn.


21 Where to go next
Eager to learn more? Keep on reading!
21.1 Build your first Elixir project
In order to get your first project started, Elixir ships with a build tool called Mix. You can get your new project started by simply running:
mix new path/to/new/project
We have written a guide that covers how to build an Elixir application, with its own supervision tree, configuration, tests and more. The application works as a distributed key-value store where we organize key-value pairs into buckets and distribute those buckets across multiple nodes:
21.2 Community and other resources
On the sidebar, you can find the link to some Elixir books and screencasts. There are plenty of Elixir resources out there, like conference talks, open source projects, and other learning materials produced by the community.
Remember that in case of any difficulties, you can always visit the #elixir-lang channel on irc.freenode.net or send a message to the mailing list. You can be sure that there will be someone willing to help. And to keep posted on the latest news and announcements, follow the blog and follow language developments on the elixir-core mailing list.
Don't forget you can also check the source code of Elixir itself, which is mostly written in Elixir (mainly the lib
directory), or explore Elixir's documentation.
21.3 A Byte of Erlang
As the main page of this site puts it:
Elixir is a programming language built on top of the Erlang VM.
Sooner or later, an Elixir developer will want to interface with existing Erlang libraries. Here's a list of online resources that cover Erlang's fundamentals and its more advanced features:
This Erlang Syntax: A Crash Course provides a concise intro to Erlang's syntax. Each code snippet is accompanied by equivalent code in Elixir. This is an opportunity for you to not only get some exposure to Erlang's syntax but also review some of the things you have learned in this guide.
Erlang's official website has a short tutorial with pictures that briefly describe Erlang's primitives for concurrent programming.
Learn You Some Erlang for Great Good! is an excellent introduction to Erlang, its design principles, standard library, best practices and much more. If you are serious about Elixir, you'll want to get a solid understanding of Erlang principles. Once you have read through the crash course mentioned above, you'll be able to safely skip the first couple of chapters in the book that mostly deal with the syntax. When you reach The Hitchhiker's Guide to Concurrency chapter, that's where the real fun starts.


Steem Developer Portal
PY: Password Key Change
How to change your accounts password and keys
Full, runnable src of Password Key Change can be downloaded as part of the PY tutorials repository.
In this tutorial we will explain and show you how to change your account password and keys on the Steem blockchain using the steem
class found within the steem-python library.
Intro
The Steem python library has a built-in function to update your account details on the blockchain. We are using the AccountUpdate
and commit.finalizeOp
to make these changes. The AccountUpdate
function creates the operation that we will be committing to the blockchain using the commit.finalizeOp
function. We first get the existing keys from your account then recreate these from your new password. Once these have been created using your new password we commit them to the blockchain. The initial parameters we need to complete this operation are:
- account - The user account that we will be changing
- old_password - Your existing password for the account we are changing
- new_password - The new password we will be updating your account with
Caution: This functionality does not work on the TestNet so we will be modifying the live blockchain.
Steps
- App setup - Library install and import. Connection to production
- User input - Input user and limit parameters
- Connect to the blockchain - Connect to the blockchain using the parameters collected from the user
- Configure new keys - Setup the new json object that will have the new keys derived from your new password
- Commit changes to blockchain - Commit the account update to the blockchain
1. App setup
In this tutorial we use 2 package:
steem
- steem-python library and interaction with Blockchainsteembase
- library containing functions to manipulate private keys and passwords as well as commit the operation to the blockchain
We import the libraries and get parameters from the user.
import steem
import steembase
from steembase.account import PasswordKey
from steembase.account import PrivateKey
from steembase import operations
2. User input
You will first be asked for the account that we will be modifying the password for. You will then be prompted to enter your existing password as well as your new password that we will update your account with.
account = input('Account: ')
old_password = input('Current password: ')
new_password = input('New password: ')
3. Connect to the blockchain
From the parameters that have been collected we will generate the private key for the account and connect to the Steem blockchain.
old_owner_key = str(
PasswordKey(account, old_password, "owner").get_private_key()
)
client = steem.Steem(keys=[old_owner_key])
4. Configure new keys
We will now generate new keys for each role using the new password as well as create the json that will be committed to the Steem blockchain. We generate new keys using the new password for each of these roles.
new_public_keys = {}
for role in ["owner", "active", "posting", "memo"]:
private_key = PasswordKey(account, new_password, role).get_private_key()
new_public_keys[role] = str(private_key.pubkey)
new_data = {
"account": account,
"json_metadata": {},
"owner": {
"key_auths": [
[new_public_keys["owner"], 1]
],
"account_auths": [],
"weight_threshold": 1
},
"active": {
"key_auths": [
[new_public_keys["active"], 1]
],
"account_auths": [],
"weight_threshold": 1
},
"posting": {
"key_auths": [
[new_public_keys["posting"], 1]
],
"account_auths": [],
"weight_threshold": 1
},
"memo_key": new_public_keys["memo"]
}
print("New data:")
print(new_data)
5. Commit changes to blockchain
The operations.AccountUpdate(**new_data)
creates the operation that will be committed to the blockchain using the new json object we have created.
Once we commit the changes to the blockchain using client.commit.finalizeOp
the changes are committed and the password is updated.
op = operations.AccountUpdate(**new_data)
result = client.commit.finalizeOp(op, account, "owner")
print("Result:")
print(result)
If you update your password and attempt to update it again to quickly you will receive the following error.
Assert Exception:_db.head_block_time() - account_auth.last_owner_update > STEEM_OWNER_UPDATE_LIMIT: Owner authority can only be updated once an hour.
You will need to wait at least an hour before attempting this again.
That’s it!
To Run the tutorial
- review dev requirements
- clone this repo
cd tutorials/33_password_key_change
pip install -r requirements.txt
python index.py
- After a few moments, you should see a prompt for input in terminal screen.


Exploring Austria’s Kreuzenstein Castle
by Geoffrey MorrisonOn a small hill on the outskirts of Vienna is Kreuzenstein Castle, parts of which date back to the 12th century. It’s a stunning, fairy-tale of a place, with a moat (now dry), towers, and a fantastic view. Being so close to Vienna, it’s an easy afternoon trip. So that’s exactly what my friends and I did, timing it just right to get a guided tour, and have an early dinner at the adjacent restaurant that serves medieval food.
Here’s what it’s like up close.
If you have a car it’s way easier. We did not. The closest train station is Leobendorf-Burg Kreuzenstein, and after that it’s a bit of a walk… then a bit of a hike up the mountain. At 869 feet its not high per se, but it’s not nothing. On the way up we walked along the road. There were only a few cars, but no sidewalks on the hike up. There’s a path through the woods, which we took on the way down and is a way better option.
The castle itself is fantastic up close. High walls perched on top of a small hill is the kind of thing you’d expect to find only in movies or video games. And indeed, a few movies were shot here.
There are only a few tours per day, and that’s the only way it. Enter through a person-sized part of a much larger door, and pay at a small kiosk. The walled ramp that brings you up into the castle courtyard is suitably epic.
You can imagine a medieval society going about it’s day-to-day within these walls, even though the current castle is a mix of structures and designs from throughout the last several centuries. This is a living place, not a static, decaying structure. Parts, however, are certainly more museum than not, with weapons collection of swords and pikes, and a kitchen centered around a stone hearth.
The tour is in German, which is fine unless your German doesn’t go much beyond “Bier, bitte.” However, a sheet with info is available in English at the gate. Plus, I was with to native German speakers who helped me out. Our tour guide was also fluent in English, so the few questions I had she was able to answer with ease.
Inside is a mix of wood-walled coziness and stone-walled coldness. Pictures were, sadly, off limits.
As fun as the castle is, my favorite part by far is the adjacent restaurant, Burgtaverne Kreuzenstein. Using seasonal ingredients and medieval recipes they create dishes that not only go with the mood of the castle, but also are worthy of trying in their own right.
I had the Medieval Roast Pork with Honey Onions, which came with fried dumplings and hand pomegranate seeds on top. I have to say, it’s one of the best things I’ve had in half a dozen trips to Austria. It was sublime. Or to put it another way, I’d go back to that restaurant, hike and all, just to have that again.
After our early dinner, we made our way back down the hill to the train station.
Adults are 12 euros. The castle is open most of the year, but closed for the winter. To find out more info, check out their website.


DATASETS 911 CALLS BLIGHT TICKETS BUILDING PERMITS CRIMES BOARDED PROPERTIES DEMOLITIONS TOTAL PROPERTY SALES FIRE INCIDENTS GREEN LIGHTS
911 CALLS BLIGHT TICKETS BUILDING PERMITS CRIMES BOARDED PROPERTIES DEMOLITIONS TOTAL PROPERTY SALES FIRE INCIDENTS GREEN LIGHTS


Before start this test, make sure the dojo/cldr/nls contains the data for "zh-cn", "fr-fr", "ja-jp", "ru-ru", "hi-in", "en-us" and "ar-eg". If not, convert these CLDR data and put them there.


Know your AI
Ethical Issues in AI
Data Privacy
Influence the crowd
Weaponization
Accountability
What is AI ?
Build your AI
Build your AI
Ethical problems in AI
Will AI take over the world?


--- layout: post title: "Less is more: language features" description: "Many languages have redundant features; progress in language design includes removing those features." date: 2015-04-13 8:16 UTC tags: [Languages] image: "/content/binary/less-is-more-language-features-figure-04.png" image_alt: "The set of all valid programs, inside the much larger set of all possible instructions, with the overlay of a language that takes away the wrong features." --- {% include JB/setup %}
{{ page.description }}
(This post is also available in Japanese.)
There are many programming languages, and new ones are being introduced all the time. Are these languages better than previous languages? Obviously, that's impossible to answer, since there's no clear measurement of what constitutes a 'better' programming language.
Still, if you look at a historical trend, it looks as though one way to make a better language is to identify a redundant language feature, and design a new language that doesn't have that feature.
"perfection is attained not when there is nothing more to add, but when there is nothing more to remove." - Antoine de Saint Exupéry
In this article, you'll see various examples of language features that have already proven to be redundant, and other features where we are seeing strong indications that they are redundant.
When the first computers were created, programs had to be written in machine code or assembly language. In machine code, you can express everything the CPU can do, because the machine code is written it terms of a CPU's instruction set. While it's possible to write correct programs in machine code, you can also write a lot of incorrect programs, including programs that crash horribly, or perhaps even destroy the machine on which they are running.
You're most likely used to writing code in a higher-level language, but even so, if you share my experience with this, you'll agree that it takes a lot of trial and error to get things right. For every correct program, there are many incorrect variations. The set of incorrect programs is much bigger than the set of correct programs.
With machine code, you have limitless ways to create incorrect programs. Yes: you can express everything the CPU can execute, but most of it will be incorrect. Thus, the set of valid programs is a small subset of the set of all possible instructions.
Early computer programmers quickly discovered that writing in machine code was extremely error-prone, and the code was also as unreadable as it could be. One way to address this problem was to introduce assembly language, but it didn't solve the underlying problems: most assembly languages were just 'human-readable' one-to-one mappings over machine code, so you still have unlimited ways to express incorrect programs.
After having suffered with machine code and assembly language for some time, programmers figured out how to express programs in high-level languages. The first programming languages aren't in much use today, but a good example of a 'low-level' high-level language still in use today is C.
In C, you can express almost all valid programs. There are still tons of ways to write incorrect programs that will crash the program (or the computer), but since the language is an abstraction over machine code, there are instructions you can't express. Most of these are invalid instruction sequences anyway, so it's for the better.
Notice what happened: moving from machine code to a high-level programming language removes a feature of the language. In machine code, you can express anything; in a high-level language, there are things you can't express. You're okay with that, because the options that were taken away from you were bad for you.
In 1968, Edsger Dijkstra published his (in)famous paper Go To Statement Considered Harmful. In it, he argued that the GOTO statement was an bad idea, and that programs would be 'better' without the GOTO statement. This sparked a decade-long controversy, but these days we've come to understand that Dijkstra was right. Some of the most popular languages in use today (e.g. Java and JavaScript) don't have GOTO at all.
Since GOTO has turned out to be an entirely redundant language feature, a language without it doesn't limit your ability to express valid programs, but it does limit your ability to express invalid programs.
Do you notice a pattern?
Take something away, and make an improvement.
There's nothing new about this; Robert C. Martin told us that years ago.
You can't just arbitrarily take away anything, because that may constrain you in such a way that there are valid programs you can no longer write:
You have to take away the right features.
Today, everyone seems to agree that errors should be handled via some sort of exception mechanisms; at least, everyone can agree that error codes are not the way to go (and I agree). We need something richer than error codes, and something that balances usefulness with robustness.
The problem with exceptions is that this mechanism is really only GOTO statements in disguise - and we've already learned that GOTO is considered harmful.
A better approach is to use a sum type to indicate either success or failure in a composable form.
As Robert C. Martin also pointed out, in older languages, including C and C++, you can manipulate pointers, but as soon as you introduce polymorphism, you no longer need 'raw' pointers. Java doesn't have pointers; JavaScript doesn't do pointers; C# does allow you to use pointers, but I've personally never needed them outside of interop with the Windows API.
As these languages have demonstrated, you don't need access to pointers in order to be able to pass values by reference. Pointers can be abstracted away.
Most strongly typed languages give you an opportunity to choose between various different number types: bytes, 16-bit integers, 32-bit integers, 32-bit unsigned integers, single precision floating point numbers, etc. That made sense in the 1950s, but is rarely important these days; we waste time worrying about the micro-optimization it is to pick the right number type, while we lose sight of the bigger picture. As Douglas Crockford explains, in JavaScript there's only a single number type, which is a great idea - just too bad it's the wrong single number type.
With the modern computer resources we have today, a programming language that would restrict you to a single, sane number type would be superior to the mess we have today.
Nulls are one of the most misunderstood language constructs. There's nothing wrong with the concept of a value that may or may not be present. Many great programming languages have this concept. In Haskell, it's called Maybe; in F#, it's called option; in T-SQL it's called null. What's common in all these languages is that it's an opt-in language feature: you can declare a value as being 'nullable', but by default, it isn't (nullable).
However, due to Tony Hoare's self-admitted billion-dollar mistake, mainstream languages have null pointers: C, C++, Java, C#. The problem isn't the concept of 'null', but rather that everything can be null, which makes it impossible to distinguish between the cases where null is an appropriate and expected value, from the cases where null is a defect.
Design a language without null pointers, and you take away the ability to produce null pointer exceptions.
If Tony Hoare is correct that null pointers cost billions of dollars in the last few decades, getting rid of that source of defects can save you lots of money. From Turing-complete languages like T-SQL, Haskell, and F# we know that you can express all valid programs without null pointers, while a huge source of defects is removed.
A central concept in Procedural, Imperative, and Object-Oriented languages is that you can change the value of a variable while executing your program. That's the reason it's called a variable. This seems intuitive, since a CPU contains registers, and what you actually do when you execute a program is that you move values in and out of those registers. It's also intuitive because the purpose of most programs is to change the state of the world: Store a record in a database. Send an email. Repaint the screen. Print a document. Etc.
However, it turns out that mutation is also a large source of defects in software, because it makes it much harder to reason about code. Consider a line of C# code like this:
var r = this.mapper.Map(rendition);
When the Map
method returns, has rendition
been modified? Well, if you follow Command Query Separation, it shouldn't, but the only way you can be sure is to review the implementation of the Map method. What if that method exhibits the same problem, by calling into other methods that could mutate the state of the application? There's nothing in C# (or Java, or JavaScript, etc.) that prevents this from happening.
In a complicated program with a big call stack, it's impossible to reason about the code, because everything could mutate, and once you have tens or hundreds of variables in play, you can no longer keep track of them. Did the isDirty
flag change? Where? What about the customerStatus
?
Imagine taking away the ability to mutate state:
Most languages don't completely take away this ability, but as Haskell (a Turing complete language) demonstrates, it's possible to write any program without implicit state mutation.
At this point, many people might object that Haskell is too difficult and unintuitive, but to me, that kind of argumentation is reminiscent of the resistance to removing GOTO. If you are used to relying on GOTO, you have to learn alternative ways to model the same behaviour without GOTO. Likewise, if you are used to relying on state mutation, you have to learn alternative ways to model the same behaviour without state mutation.
In Object-Oriented languages like C# and Java, the default equality comparison is Reference Equality. If two variables point to the same memory address, the variables are considered equal. If two variables have all identical constituent values, but point to two different memory addresses, they are considered different. That's not intuitive, and many software defects are caused by this.
What if you take away Reference Equality from a language?
What if all data structures instead had Structural Equality?
This one I'm not entirely sure about, but in my experience, I almost never need Reference Equality. For Basic Correctness you never need it, but I wonder if you may need the occasional reference comparison in order to implement some performance optimizations... Still, it wouldn't hurt to switch the defaults so that Structural Equality was the default, and there was a special function you could invoke to compare two variables for Reference Equality.
Even in 2015, inheritance is everywhere, although it's more than 20 years ago the Gang of Four taught us to favor object composition over class inheritance. It turns out that there's nothing you can do with inheritance that you can't also do with composition with interfaces. The converse doesn't hold in languages with single inheritance: there are things you can do with interfaces (such as implement more than one), that you can't do with inheritance. Composition is a superset of inheritance.
This isn't just theory: in my experience, I've been able to avoid inheritance in the way I've designed my code for many years. Once you get the hang of it, it's not even difficult.
Many strongly typed languages (for example Java and C#) have interfaces, which is a mechanism to implement polymorphism. In this way, you can bundle various operations together as methods on an interface. However, one of the consequences of SOLID is that you should favour Role Interfaces over Header Interfaces, and as I've previously explained, the logical conclusion is that all interfaces should only have a single member.
When interfaces only have a single member, the interface declaration itself tends to mostly be in the way - the only thing that matters is the operation. In C#, you could just use a delegate instead, and even Java has lambdas now.
There's nothing new about this. Functional languages have used functions as the basic compositional unit for years.
In my experience, you can model everything with single-member interfaces, which also implies that you can model everything with functions. Again, this isn't really surprising, since functional languages like Haskell are Turing complete too.
It's possible to get by without interfaces. In fact, Robert C. Martin finds them harmful.
 It's a set of APIs and language or platform features that enable you to inspect, query, manipulate, or emit code.
Meta-programming is an indispensable tool, so I'd be sorry to lose it. However, Reflection isn't the only way to enable meta-programming. Some languages are homoiconic, which means that a program in such languages is structured as data, which itself can be queried and manipulated like any other data. Such languages don't need Reflection as a feature, because meta-programming is baked into the language, so to speak.
In other words: Reflection is a language feature aimed at the goal of meta-programming. If meta-programming can be achieved via homoiconicity instead, it would imply that Reflection is a redundant feature.
While it may be true that null pointers are the biggest single source of software defects, in my experience the greatest single source of unmaintainable code is coupling. One of the most problematic types of coupling is cyclic dependencies. In languages like C# and Java, cyclic dependencies are almost impossible to avoid.
Here's one of my own mistakes that I only discovered because I started to look for it: in the otherwise nice and maintainable AtomEventStore, there's an interface called IXmlWritable:
public interface IXmlWritable { void WriteTo(XmlWriter xmlWriter, IContentSerializer serializer); }
As you can tell, the WriteTo method takes an IContentSerializer argument.
public interface IContentSerializer { void Serialize(XmlWriter xmlWriter, object value); XmlAtomContent Deserialize(XmlReader xmlReader); }
Notice that the Deserialize method returns an XmlAtomContent value. How is XmlAtomContent defined? Like this:
public class XmlAtomContent : IXmlWritable
Notice that it implements IXmlWritable. Oh, dear!
Although I'm constantly on the lookout for these kinds of things, that one slipped right past me.
In F# (and, I believe, OCaml), on the other hand, this wouldn't even have compiled!
While F# has a way to introduce small cycles within a module using the and
and rec
keywords, there are no accidental cycles. You have to explicitly use those keywords to enable limited cycles - and there's no way to define cycles that span modules or libraries.
What an excellent protection against tightly coupled code! Take away the ability to (inadvertently) introduce Cyclic Dependencies, and get a better language!
This has even been shown to work in the wild: Scott Wlaschin examined C# and F# projects for cycles, and found that F# projects have fewer and smaller cycles than C# projects. This analysis was later enhanced and corroborated by Evelina Gabasova.
What I've tried to illustrate in this article is that there are many ways in which you could make a better language by taking away a particular feature from an existing language. Take away a redundant feature, and you'll still have a Turing complete language that can do (close to) anything, but with fewer options for shooting yourself in the foot.
Perhaps the ultimate programming language is a language without:
Have I identified all possible redundant features? Most likely not, so here's a great opportunity for language designers to define an even better language, by finding something new to take away!
Update September 14 2015: This article sparked a .NET Rocks! episode with even more discussion about this topic.
Comments
The idea that Javascript is a superset of "valid programs", but that C is not, could do with more explanation.
My background is in server code (Haskell/Java/Python/Javascript/Rust), web code (Javascript) and embedded code (Rust/C) (with some ARM assembly for when Rust/C can't produce the needed program unaided). This makes the idea that I could express programs in Javascript, which I couldn't in C, very interesting.
I think that Rust is going to be very important in embedded development, in a few years.
P.S. I hope I have commented in the correct way.
Chris, thank you for writing. Where in this article do I claim that there are programs you could express in JavaScript, but not in C?
Thanks for the post Mark. Some great points; I like especially the idea of disallowing cyclic dependencies. That'd be awesome on a legacy Java project I'm working on now!
Having working in Scala and a little Haskell, I can say I love the Maybe type. One thing I have trouble visualising still is Exceptions. I think I need to find some more examples on doing without exceptions in real applications.
I guess there's somewhat of a middle ground between having the "safest" language, vs the most performant language. In a lot of cases you don't need awesome performance so the safest language is the better one... but in some you do. You occasionally need control over how your bits are packed.
Let's hope for the future!
Lachlan, thank you for writing. When it comes to working without exceptions, the point is to replace them with something stronger. Scott Wlashin's post and presentation about Railway Oriented Programming is a great place to start. You can see another example in my No Mocks presentation, and in one of my up-coming Pluralsight courses.
When it comes to the balance between safe and performant, there will always be room for languages that sacrifice safety for speed, but in my experience, this shouldn't be a common concern. As soon as you're doing any sort of significant I/O, the cost of that tends to be so much higher than any potential imperfections in pure CPU processing.
Apart from that, I don't see why, in principle, a safe language couldn't also be performant. These two traits don't seem to me to be intrinsically mutually exclusive.
As one of less-is-more advocates, I feel your article makes sense instinctively. However, one thing keeps bugging me:How do you define "valid programs"?
I think I know what you try to mean with it, but once we try to be more specific, validity can only be defined in terms of a certain framework of semantics. If we have such a framework, then we can derive a programming language from it, which would be a language that only accepts valid programs and reject others. Problem solved.
In reality we don't have such a framework. We don't know what is a valid program precisely. There are programs that doesn't seem to make sense, and there are programs that are obviously useful, but there are huge gray area inbetween. It's actually a moving target---the context, the environment, the user, and other outside factors will greatly affect what's valid or not. But the fact that we don't know what valid programs shakes the ground of this whole discussion, doesn't it? Or it can end up tautology---"valid programs are defined in terms of this language, so this language fit the best to cover the valid programs."
Shiro Kawai, thank you for writing. In this article, I deliberately left the definition of validity vague. Why do we write software? If we exclude Katas and the like (which we do for training), software is ultimately written in order to solve problems; in order to be used. A valid program is a program that's useful.
This doesn't change the discussion, which is pragmatic. From experience, we know that we don't need GOTO; from experience, we know that we don't need pointers; from experience, we know that we don't need null pointers; from experience, we know that we don't need inheritance; etc.
Hi, thanks for the reply. I believe I get your intent. What I wanted was to point out a danger of this kind of argument. Because when you write software to solve problems, you need to articulate the problem, and the way you frame the problem is inevitably influenced by the frame of your language of choice. In other words, when you think you tighten the circle of the language features, it's not necessarily that you get it close to supposed set of "valid programs", but you may just as well start ignoring useful programs outside of your langauge circle and you don't even realize that. You just think "ok, there may be some programs that falls outside but it's not that important." How do you verify that the excluded gray area isn't that important?
(I wrote "you", but actually this is something I constanly try to remind myself, since I tend to be dragged toward feature-minimalism. I love Scheme.)
For example, you talk single-member inheritance and you brought up Haskell, but you didn't mention type classes. Isn't type classe sort of interface, in a sense that it defines a protocol consists of multiple functions? Do you say it's actually redundant? Or will you dismiss programs that can be expressed well using type classes "unimportant"?
Another controversial (and probably obscure) feature is change-class in CL. This one is such a beast that it's difficult to cope with many modern features (obviously it invalidates strict typecheckers). However, in the context where the feature is needed, I don't know if there's a replacement. If you get rid of it, you just have to give up the kind of software that require the feature. That's a reasonable trade-off, but what you do is that you cut off a part of "valid programs" in order to tighten the circle.
There's no solid circle of valid programs, and as you tighten the circle of the language, you actually shape the circle of valid programs that suit to the circle of language you draw. That's not necessarily a bad thing, but the language designers need to be aware of it, that's what I wanted to say.
It's a good point that a language shapes how you approach problems. In this discussion, I assume that all languages (both existing and hypothetical) are Turing complete, but even under that assumption, there will be problems that are difficult, or perhaps even impossible, to address in a particular language.
The question is whether that isn't true for all languages?
In a sense, the most 'powerful' languages are all the dialects of machine code.  Despite being complete, these dialects don't have inheritance, exceptions, Reflection, interfaces, or a lot of other things. Such features are features that have been added to some languages. Logically, I don't see how 'removing' such a feature constrains one's ability to express 'all valid programs'.
To be fair, that argument of mine doesn't apply to all the language features I've described. For example, CPU instruction sets most certainly allow immutability.
What I was aiming at with my article was never a formal discussion about how a hypothetical language would, or wouldn't, be able to express 'all valid programs'. The purpose was more to point out that decades of experience should by now have taught the overall programmer community that there are many language features that we can do without.
As I pointed out, you can't arbitrarily remove features. Some features are extremely important within a particular language, while it may be irrelevant in another language. While I don't know much about Type Classes, it seems to be an example of this: it's very important in Haskell, but doesn't exist at all in C# or F#.
This is also the reason why I don't think we'll ever have a single, perfect programming language. In the future, we'll also have many different languages, and they'll be good at different types of problems.
Just as it is today, it'll be important to know more than a single programming language, because, exactly as you wrote, a problem may 'fall outside' a given language, but then, if you know another language, you may realise that you can use it to solve that particular problem.


Overview
Package
Class
Use
Tree
Deprecated
Index
Help
PREV LETTER
NEXT LETTER
FRAMES
NO FRAMES
All Classes
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
R
S
T
U
V
W
X
Y
Z
_
R
range(Expr)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Expr
Returns the expression (this :> x)
RANGE
- Static variable in class edu.mit.csail.sdg.alloy4compiler.parser.
CompSym
range(SimTupleset)
- Method in class edu.mit.csail.sdg.alloy4compiler.sim.
SimTupleset
Returns this:>that (NOTE: if that.arity!=1, then we return the empty set)
rangeRestrict(Type)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Type
Returns a new type { R[0]->..->R[n-1] | exists n-ary A in this, exists unary B in that, such that R[i]==A[i] except R[n-1]==(A[n-1] & B)
RBRACE
- Static variable in class edu.mit.csail.sdg.alloy4compiler.parser.
CompSym
RBRACKET
- Static variable in class edu.mit.csail.sdg.alloy4compiler.parser.
CompSym
read(Module, String, List<ExprVar>)
- Static method in class edu.mit.csail.sdg.alloy4compiler.sim.
SimInstance
Construct a new simulation context by reading the given file.
read(Iterable<Sig>, XMLNode)
- Static method in class edu.mit.csail.sdg.alloy4compiler.translator.
A4SolutionReader
Parse the XML element into an AlloyInstance.
read_lookahead()
- Method in class java_cup.runtime.
lr_parser
Read from input to establish our buffer of "parse ahead" lookahead Symbols.
readAll(String)
- Static method in class edu.mit.csail.sdg.alloy4.
Util
Read everything into a String; throws IOException if an error occurred.
readAlloy(String, VizState)
- Static method in class edu.mit.csail.sdg.alloy4viz.
StaticThemeReaderWriter
Read the XML file and merge its settings into an existing VizState object.
real_next
- Variable in class java_cup.runtime.
virtual_parse_stack
Top of stack indicator for where we leave off in the real stack.
real_stack
- Variable in class java_cup.runtime.
virtual_parse_stack
The real stack that we shadow.
reasons
- Variable in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprChoice
The unmodifiable list of String(s) explaining where each choice came from.
recordKodkod
- Variable in class edu.mit.csail.sdg.alloy4compiler.translator.
A4Options
This option specifies whether the compiler should record the original Kodkod formula being generated and the resulting Kodkod instances.
redo()
- Method in class edu.mit.csail.sdg.alloy4.
OurSyntaxWidget
Perform redo if possible.
reduce_tab
- Variable in class java_cup.runtime.
lr_parser
Direct reference to the reduce-goto table.
reduce_table()
- Method in class edu.mit.csail.sdg.alloy4compiler.parser.
CompParser
Access to
reduce_goto
table.
reduce_table()
- Method in class java_cup.runtime.
lr_parser
The reduce-goto table (supplied by generated subclass).
reflexiveClosure()
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Expr
Returns the expression (*this)
registerApplicationListener(Runnable, Runnable, Runner, Runnable)
- Static method in class edu.mit.csail.sdg.alloy4.
MacUtil
Register a Mac OS X "ApplicationListener"; if there was a previous listener, it will be removed first.
relation2tuples(AlloyRelation)
- Method in class edu.mit.csail.sdg.alloy4viz.
AlloyInstance
Returns an unmodifiable sorted set of AlloyTuple(s) in this relation; answer can be an empty set.
reloadAll()
- Method in class edu.mit.csail.sdg.alloy4.
OurTabbedSyntaxWidget
Refresh all tabs.
rem(Expr)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Expr
Returns the formula "this.rem[x]" (the remainder of dividing this by x)
remakeAll()
- Method in class edu.mit.csail.sdg.alloy4viz.
VizCustomizationPanel
Regenerate all the customization widgets based on the latest settings.
remakeAll()
- Method in class edu.mit.csail.sdg.alloy4viz.
VizGraphPanel
Regenerate the comboboxes and the graph.
remove(int)
- Method in class edu.mit.csail.sdg.alloy4.
ConstList.TempList
Removes then returns the i-th element.
remove(K)
- Method in class edu.mit.csail.sdg.alloy4.
Env
Removes the latest mapping for the key (and if the key had previous mappings, they become visible).
removeAll(SimAtom)
- Method in class edu.mit.csail.sdg.alloy4compiler.sim.
SimTupleset
Return this minus any tuple that contains the given atom.
removesBoolAndInt(Type)
- Static method in class edu.mit.csail.sdg.alloy4compiler.ast.
Type
Create a new type that is the same as "old", except the "is_bool" and "is_int" flags are both set to false.
replace(int, SimAtom)
- Method in class edu.mit.csail.sdg.alloy4compiler.sim.
SimTuple
Replace the i-th atom, and return the resulting SimTuple.
replace(Map<SimAtom, SimAtom>)
- Method in class edu.mit.csail.sdg.alloy4compiler.sim.
SimTuple
Replace each atom using the given SimAtom->SimAtom map; any atom not in the map will stay unchanged.
report_error(String, Object)
- Method in class java_cup.runtime.
lr_parser
Report a non fatal error (or warning).
report_fatal_error(String, Object)
- Method in class java_cup.runtime.
lr_parser
Report a fatal error.
requestFocusInWindow()
- Method in class edu.mit.csail.sdg.alloy4.
OurSyntaxWidget
Transfer focus to this component.
resetTheme()
- Method in class edu.mit.csail.sdg.alloy4viz.
VizState
Clears the current theme.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Expr
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprBad
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprBadCall
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprBadJoin
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprBinary
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprCall
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprChoice
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprConstant
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprCustom
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprITE
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprLet
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprList
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprQt
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprUnary
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprVar
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Sig.Field
Resolves this expression if ambiguous.
resolve(Type, Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Sig
Resolves this expression if ambiguous.
resolve(AlloyElement)
- Method in class edu.mit.csail.sdg.alloy4viz.
VizState.MMap
resolve_as_formula(Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Expr
Converts this into a "formula" if possible, then resolves it if ambiguous.
resolve_as_int(Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Expr
Converts this into an "integer expression" if possible, then resolves it if ambiguous.
resolve_as_set(Collection<ErrorWarning>)
- Method in class edu.mit.csail.sdg.alloy4compiler.ast.
Expr
Converts this into a "set or relation" if possible, then resolves it if ambiguous.
restart_lookahead()
- Method in class java_cup.runtime.
lr_parser
Reset the parse ahead input to one Symbol past where we started error recovery (this consumes one new Symbol from the real input).
resultCNF(String)
- Method in class edu.mit.csail.sdg.alloy4.
A4Reporter
If solver==KK or solver==CNF, this method is called by the translator after it constructed the Kodkod or CNF file.
resultSAT(Object, long, Object)
- Method in class edu.mit.csail.sdg.alloy4.
A4Reporter
If solver!=KK and solver!=CNF, this method is called by the translator if the formula is satisfiable.
resultUNSAT(Object, long, Object)
- Method in class edu.mit.csail.sdg.alloy4.
A4Reporter
If solver!=KK and solver!=CNF, this method is called by the translator if the formula is unsatisfiable.
returnDecl
- Variable in class edu.mit.csail.sdg.alloy4compiler.ast.
Func
The declared return type; never null.
reverse()
- Method in class edu.mit.csail.sdg.alloy4viz.
AlloyTuple
Returns a new AlloyTuple whose list of atoms is the same but in reverse.
right
- Variable in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprBadJoin
The right-hand-side expression.
right
- Variable in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprBinary
The right-hand-side expression.
right
- Variable in class edu.mit.csail.sdg.alloy4compiler.ast.
ExprITE
The else-clause.
right
- Variable in class java_cup.runtime.
Symbol
root
- Variable in class edu.mit.csail.sdg.alloy4compiler.sim.
SimInstance
The root module associated with this instance.
RPAREN
- Static variable in class edu.mit.csail.sdg.alloy4compiler.parser.
CompSym
run()
- Method in class edu.mit.csail.sdg.alloy4.
MailBug
This method will query alloy.mit.edu for the latest version number.
run()
- Method in class edu.mit.csail.sdg.alloy4.
Runner
This method should be overriden to provide the default action that this Runner would perform.
run(Object)
- Method in class edu.mit.csail.sdg.alloy4.
Runner
This method should be overriden to provide the default action that this Runner would perform given an argument.
run(WorkerEngine.WorkerTask, int, int, String, String, WorkerEngine.WorkerCallback)
- Static method in class edu.mit.csail.sdg.alloy4.
WorkerEngine
This issues a new task to the subprocess; if subprocess hasn't been constructed yet or has terminated abnormally, this method will launch a new subprocess.
run(WorkerEngine.WorkerCallback)
- Method in interface edu.mit.csail.sdg.alloy4.
WorkerEngine.WorkerTask
The task should send zero or more non-null Objects to out.callback(msg) to report progress to the parent process.
RUN
- Static variable in class edu.mit.csail.sdg.alloy4compiler.parser.
CompSym
runLocally(WorkerEngine.WorkerTask, WorkerEngine.WorkerCallback)
- Static method in class edu.mit.csail.sdg.alloy4.
WorkerEngine
This executes a task using the current thread.
Runner
- Class in
edu.mit.csail.sdg.alloy4
This class converts a Runnable into an AbstractAction, WindowListener, CaretListener, and MenuListener also.
Runner()
- Constructor for class edu.mit.csail.sdg.alloy4.
Runner
Constructs a new runner; you should override the run() and run(arg) method to customize it.
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
PREV LETTER
NEXT LETTER
FRAMES
NO FRAMES
All Classes
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
R
S
T
U
V
W
X
Y
Z
_


NASM-X
Next Chapter |
Previous Chapter |
Contents |
Index
- Fixed INVOKE stack alignment bug
- Enhanced INVOKE to save and restore register eax/rax when used in parameter arguments if necessary
- Optimized USES macro
- Corrected x64 register parameter spill behavior
- Corrected various Windows structure definitions
- Added pragmas PROC_FASTCALL_STACK_PRELOAD and INVOKE_FASTCALL_STACK_PRELOAD
- Deprecated previous FASTCALL_STACK_PRELOAD pragma
- Nasm v2.11 or greater now required due to preprocessor fixes
- Updated Windows distribution "bin" directory with NASM v2.11.02
- Updated html docs and Windows Compiled Help Modules
- Refresh Win32 distribution "bin" directory with
latest release version of Nasm:
NASM v2.11, NDISASM v2.11
- New docs directory added.
- Added NASM-X html document files
- Windows Compiled Help Modules:
- Created NASM-X.CHM
- Updated NASMDOC.CHM to Nasm 2.11
- Corrected structure alignment issue
- Added defines to all win32 include files
based on value of UNICODE
- Added FASTCALL_STACK_PRELOAD pragma
When disabled the fastcall register arguments will no longer
automatically spill into the register shadow space on the stack.
It is enabled by default only on Win64 to remain backward compatible.
- Fixed issue when user specifies structure member name with _type appended.
Added BSD x86 & x64 syscall support
Added BSD Demos 1-5
Refresh Win32 distribution "bin" directory with
latest release version of Nasm:
NASM v2.10.07, NDISASM v2.10.07
Updated NASMDOC.CHM to Nasm 2.10.07
Added Win32 Demo 15 - OpenGL Torus example
Added Win32 Demo 16 - GTK example program
Added Win32 Demo 17 - GDI floor program
Added Win64 Demo 6 - GDI floor program
Added Linux64 Demo 5 - Xlib example
Added REPEAT, UNTIL, CONTINUE macros
Fixed BREAK macro bug
Fixed INVOKE macro bug for x64 Linux procs
with more than 6 arguments
Refresh Win32 distribution "bin" directory with
latest release version of tool chain:
NASM v2.10.05, NDISASM v2.10.05
GoLink v0.27.00
Update NASMDOC.CHM Windows help file to include
latest Nasm documentation changes.
Fixed SOCKET definition in winsock.inc
Official release
Updated Win32 "bin" directory with latest release
versions of nasm tools:
NASM v2.09.10, NDISASM v2.09.10
Added convenience scripts for setting NASMENV
Added Linux x64 syscall support
See CHANGES.TXT for more history
Next Chapter |
Previous Chapter |
Contents |
Index


This is a short review of and some thoughts about the Targeted Malware Reverse Engineering course currently offered through Kaspersky's online training platform.
Pros:
Cons:
I've created a short cheat sheet for mapping C data structures to assembly - you can find it here. It's based largely on Dennis Yurichev's book Reverse Engineering for Beginners.
How to pass program parameters to the Ghidra debugger (now integrated into the master branch) - answer with screenshots here.
Others may find this useful - this is my
makefile for assembling and linking 32-bit files with yasm and gcc on
Linux:
testfile: testfile.o
gcc -m32 -o testfile
testfile.o
testfile.o: testfile.asm
yasm -f elf32 testfile.asm -l testfile.lst
After finally receiving my entry-level penetration testing certificate from Virtual Hacking Labs, I decided I need to tackle assembly. I'm still not comfortable doing stack overflows and am years away from being prepared to take the OSCP exam.
I've browsed though several x86 assembly resources, including the excellent book "Assembly Language Step-by-Step" by Jeff Duntemann. After a few months, I finally came across a very practical resource with a repository of x86 exercises and solutions, plus video lectures. It's offered by xorpd, who seems to be an experienced reverse engineer. I've been pleased by the assembly course so far and do highly recommend it. The exercises are the key to mastery and I must say they are very well done (and available for free if you don't care to pay for the video lectures).
So I participated in my first CTF the other
day. For about 6-8 months now, I've been slowly learning all about
penetration testing. It started as an interest in web app pen testing
and now I'm taking a more general approach. Anyway, the people at SANS
made their NetWars available for free this year and I signed up just to
see what it's like.
Well...it's intense for sure. 2 days, 8
hours total of problem solving on a VM. I got to Level 2, only a few
points away from Level 3 but light years away from people at Level 5 who
someohow got 600+ points. One of the most interesting questions had to
do with the Volatility tool for memory dump analysis. Given a process
ID, Volatility can analyze that process and uncover what a user was
doing. As in, what someone was typing in Notepad.exe at a given time.
Really cool and disconcerting at the same time.
I'm a developer with a passion for art. I have a wide range of interests including reverse engineering, mobile application development, mixed media art and screenwriting.


In 2006 I founded and ran specialist Agile agency Yoomee. Since then I've helped deliver over 70 digital innovation projects for charities and non-profits making new services for vulnerable people.
I spent five years designing the online volunteering service for vInspired. The service is used by 5,000 charity partners and a quarter of a million young people, and since 2006 has delivered more than a million volunteering opportunities for 14-25 year olds across England.
I took Elefriends from concept to full-scale service, making it the UK's most successful online peer support service, supporting over 80,000 vulnerable people.
I was responsible for developing the design and delivery strategy behind Comoodle, a new model of service delivery for Kirklees Council, with the emphasis on sharing what's already available within the community. Over 2,600 sharable resources are now managed on the platform and available to communities in Kirklees
I led on strategy, co-design and user-centred design helping to combine knowledge, resources and material from across the city: the NHS, Leeds City Council and voluntary organisations.


The purpose of this group is to make the awesome Respect components work on PHP 5.2
Github Repos »
The most awesome validation engine ever created for PHP -> and works on PHP 5.2
Go to page »
github »


continue
I represent the width of your device
Use the slider to change the width of the device at any time.
It will not affect the boxes' offset from center


Histories($date)
用户
消息
时间
foreach($histories as $history) { $nick = $history['nick']; $body = $history['body']; $style = $history['style']; $time = date( 'm-d H:i', (float)$history['timestamp']/1000 );
{$nick}
{$body}
{$time}
}


Gestures include touch mechanics (what your fingers do on the screen) and touch activities (results of specific gestures).
A touch mechanic may cause different outcomes, depending on the context in which it is used. For example, a long press may select an element like a list item.
A touch activity may be achieved through combining multiple touch mechanics. For example, by using the touch mechanics of pinch open, double-touch, or double-touch and dragging, a user may zoom in on a view.