What happened when Boston Public Schools tried for equity with an algorithm - <AUTHOR> https://apps.bostonglobe.com/ideas/graphics/2018/09/equity-machine/ <comment><USER2> I have a miniature version of this, as I'm in charge of the duty schedule at my flying club and I wrote a program to generate the schedules for me.

There's a function which takes a schedule and generates a score. Leaving a spot unfilled or scheduling someone who isn't available subtracts lots of points. Scheduling someone much more or less often than the median subtracts points based on how much of a difference there is. Scheduling someone on a day they prefer adds points, and so forth.

Then it's a simple hill-climbing algorithm starting from an empty schedule. I get people's availability and preferences into the program, hit run, and out pops a schedule.

I learned early on that I must check the result before publishing it. The algorithm itself works fine. Hill climbing probably isn't finding the absolute optimal schedule, but it does a good job. The problem, of course, is the scoring function. Sometimes it turns out to be missing some important constraint. Much more often, I need to tinker with the weights assigned to various conditions.

People assign too much agency and intelligence to computers. They are, of course, just tools. A nail gun will put a nail into whatever you point it at, whether it's drywall or flooring or feet. Likewise, a computer optimization system will optimize whatever function you tell it to, and will probably do an excellent job, but it's up to you to make sure the function accurately describes what the humans want.

<comment><USER3> Hi, I did my masters research into this very problem. A lot of research here does just simply revolve around iterations of hill climbing [1]

One thing which has been done quite a lot (and that's not to say you don't already do this), is to measure the gradient of improvement of your fitness function, and if it's been flat for too long, to relax the conditions/weights by X percent (X becomes another thing to tinker here, but I start with 10%). The flatness here suggests that you may be in a local optimum in the candidate space.

This will allow worse solutions for many more iteration, (and a graph tracking the fitness will go the wrong direction), but in the end, you might find that you end up with a solution that is much 'fitter' than before the algorithm relaxed the conditions. (In the academic papers I read at the time, various words were used for this, sometimes it was called 'reheat')

It seems that even if you don't do this, you know about it intuitively anyway since you talked about tinkering with the weights, just thought I'd chime in to mention that the tinkering part is often automated now.

[1] [https://en.wikipedia.org/wiki/Great_Deluge_algorithm](https://en.wikipedia.org/wiki/Great_Deluge_algorithm)

EDIT: A sibling comment pointed out Simulated Annealing also, which provides a more analogous means to discuss the 'reheat' stage here.

<comment><USER2> That's cool. I'll keep that in mind if I need improvements or just feel like doing something more with it.

I don't think tinkering with the weights is quite the same thing. That happens when the algorithm is doing a good job of optimizing the scoring function, but the scoring function isn't doing a good job of representing what people want.

It does remind me of another thing I occasionally do when I don't quite get the results I want, which is to manually change one of the assignments and then have it climb the hill from there. Sometimes I'll just clear some assignments and re-run, which is pretty much a manual, ad-hoc version of what you describe.

<comment><USER3> Ah I understand, half the battle is terminology (I was introduced to the 'weights' as hard and soft constraints, with corresponding penalties against the fitness function score).

Even though I did research on it, I found that the field is subject to a lot of colloquialisms (for lack of a better term) when it comes to different research cliques, and therefore the terminology I use isn't any more of less correct as a result.

It seems like you've got as good a handle on it as anyone.

My research was mainly involving investigating parallelism of the above algorithm (not very friendly to parallelism without work).

Nowadays, there's so many academic open source optimizers, as well as commerical, that I would usually tell people if you're solving for a business case, it's often more cost effective to frame your problem in a format digestible by the solvers and let them at it than writing the solvers yourself.

Of course, where's the fun in that? I'm jealous that you got to use this for a problem that you had, rather than in my approach which was for a problem I didn't need solved myself. I bet that was satisfying.

</comment></comment></comment></comment><comment><USER4> I am one of the two PhD students that conducted this research with Boston Public Schools. I'll be glad to answer any question you may have.

<comment><USER5> Did anyone suggest making the change, but announcing it today and having it come into effect a year (or even two) from now? That would give parents time to plan adjustments to their schedule, and would give a lot of people the chance to move schools if they really wanted to.

<comment><USER6> > District officials expected some pushback when they released the new school > schedule on a Thursday night in December, with plans to implement in the > fall of 2018.

That's a ~9 month notice?

<comment><USER5> The first round of applications for schools in Boston is January, so it's only a few weeks (over Christmas!) for families to figure out if they can make it work, if it's worth moving schools, which school they want to move to, etc. (Your chances of getting into your first choice school decline rapidly after the first round).

</comment></comment></comment></comment><comment><USER7> This article doesn't mention it, but the biggest problem with Boston Public Schools transportation is that students don't actually attend the school in their neighborhood. The school district assigns you a school that may not be located particularly near you, in order to increase school diversity. So a lot of this transportation time and expense is taken up to shuffle students around to far-away schools.

<comment><USER8> Denver Public Schools have a 'choice' model that works alright[0]. You can opt, for free and without restrictions, to go to another school other than the neighborhood one (you are automatically put in the 'closest' as a placeholder). Generally, there is no busing with DPS, as school kids ride free on public transit. The Denver School of Science and Technology[1] is a 'charter/public' portion of DPS that regularly pull from across the metro, mostly via public transit. There are _many_ other issues with DPS, but the 'choice' model they use, along with the assistance of public transit, generally works pretty well.

[0][http://schoolchoice.dpsk12.org/schoolchoice- round-1/](http://schoolchoice.dpsk12.org/schoolchoice-round-1/)

[1]

<comment><USER9> New York City also uses citywide school choice for high school. School choice _really_ doesn't scale up. You end up getting a yellow-pages sized book of schools (and each page is a single school!), you trek across the city to view schools, there are entire forums and such dedicated to navigating the process. It's like the college application process in miniature.

We also generally do not use busing, but New York City is so large and congested that you start asking a _lot_ of kids. I went to a school that was 90 minutes away by public transit on a good day, so I'd wake up at 5am to make an 8am start time.

<comment><USER8> > I'd wake up at 5am to make an 8am start time

Oh man! A friend in HS had swim practice before school and woke up at ~4:30 for it 3 days a week. On each of those days, she was just a zombo. I can't even imagine doing that every year. Do you think it was worth it for you?

<comment><USER9> The other choices, unfortunately, weren't much better. New York calibrates its schools to match up with parent commutes so that kids leave at the same time or earlier, and these parents in my neighborhood often had the same 90+ minute commute. As an example, there was a much closer in school that was 45 minutes away by bus, but they started at 7am, so it would've required an _earlier_ wakeup time.

There was a school within walking distance, but the graduation rates weren't too hot. The nice thing about school choice, in theory, is that it doesn't cause neighborhoods to gentrify or disintegrate due to the quality of the local school. But if you scale it up to a million kids you basically make it so that only people with time and money can really game the system. I wouldn't consider myself particularly blessed, but I definitely was not the worst off person.

</comment></comment></comment></comment></comment><comment><USER10> This, essentially, looked like a grander scale version of almost every web design project ever. What is different is that, over time, web teams have learned to use "mockups" or "wireframes", to put in front of the end recipient some simulation or approximation of what the final result will look like. Why? Because otherwise you get this sequence:

1) end recipient tells you what they want

2) you build that, perhaps exactly

3) they don't like it

Thinking in abstractions, and imagining what that would really look like once implemented, is more or less a job description for programmers. It isn't, for most other jobs, and thus most other people. If you don't do frequent reality checks during the process, you will be quite likely to get this result at the end. Of course, the students doing the programming in this case, were unlikely to have had multiple software projects' experience, to know this. But someone there should have, and should have insisted on putting sample results in front of parents to see what their theoretical response would be. I find that management, and probably also politicians, don't like doing that because they can't control how the conversation goes, and it could bring them bad news. But putting that off until the end, brings worse news.

<comment><USER11> Isn't that more or less what they did? Having a couple of grad students compute exactly what shifting high school later without costing a lot of extra money sounds sort of like the definition of exploring what the change would look like.

ADDED: To be fair, they did try to take the results and try to run with them. It seems as if there would have been less of an issue had they taken the results and did more outreach to find if this was a change parents were actually OK with.

<comment><USER12> Yeap, the article has a very heavy handed one side to it.

I mean, it sounds like "Silly users don't like my smart product that no one uses" without considering, maybe, just maybe, the product wasn't good?

The author did touched on it a little by mentioning the difficulty for working parents to move their work schedule, but it seemed glossed over. I'd think changes that interfere with the the household bread earners ability to earn would be a serious consideration and a deal breaker for any proposed change.

Not to say politics aren't incredibly inefficient and way more emotive than logic prone.

</comment></comment></comment><comment><USER13> This genre of article, which I call "poor little algorithm," is very interesting.

1) We hear about how hard the algorithm worked (vs the programmers tangential involvement):

> _" Sorting through 1 novemtrigintillion options — that's 1 followed by 120 > zeroes — the algorithm landed on a plan"_

2) We hear about the push-back:

> _" But no one anticipated the crush of opposition that followed"_

3) We are assured the algorithm was an upstanding citizen:

> _" They couldn't help but notice, though, that most of the critics hailed > from wealthier sections of the city"_

4) Finally, we say it wasn't the poor little algorithms fault:

> _" IN THE END, the school start time quandary was more political than > technical"_

<comment><USER12> The Boston Globe is owned by John W Henry.

The man operates algorithm trading systems; it's the reason he is a billionaire.

I'm shocked, shocked I tell you that I read algorithm positive news stories in his newspaper. Shocked!

</comment></comment><comment><USER14> UK: most schools start at around 9am to 9:15am

Children who live too far from the school to walk catch a bus, an ordinary scheduled bus on a standard route, or the train# or the metro. They get special bus passes (some get them free, I think most now).

What I'm saying I think is why on earth is the Boston school system in the public transport business to start with?

(#) Doing your homework on the train on the way to school is one ritual I was amused recently to see is still going strong. I did this and my _dad_ did this (pre WW2).

<comment><USER15> > an ordinary scheduled bus on a standard route

I'm pretty sure that when i was at school in the UK, there were specific school bus routes. They weren't operated by the schools or the local education authority, so i assume they were special services run by the local bus operators, using stock that would be used on other routes at other times.

I believe each route served multiple schools - kids from my school would share the bus with kids from other schools. Since we were the grammar school, full of nerds in garish purple blazers, and they were, well, not, this was sometimes a stressful experience.

It may be relevant that this was in Colchester, a town with numerous schools, some quite close to each other, whose catchment areas take in lots of small villages, where there isn't necessarily a good normal bus service.

Mind you, i got the (ordinary!) train, so i'm not sure of the detail.

<comment><USER14> I take your point, villages -> local market town probably needed special runs. Big city comprehensive boy myself.

</comment></comment></comment><comment><USER16> I was asked to choose someone to receive a small prize/incentive, out of a list of fundraisers. I'd never done anything like that before, so I thought "I'm going to do this right!". So I went to random.org to get a real random number to select from the list.

Alas, my first selection was rejected by my supervisor because they were related to a co-worker. Ok, try again.

The next selection was rejected because she knew they weren't able to utilize the prize.

The next selection happened to be someone who had raised the least of anyone on the list. That wouldn't do.

I finally said "ok, _you_ choose someone that's deserving and hasn't won recently".

Computers have a way of exposing you when you think you know what algorithm you want, but you don't.

</comment><comment><USER17> This is nothing to do with the algorithm, and all about the downsides of centralized administration.

If anything, it's just a case of political leaders failing to communicate and take action to garner support for doing something with abstract/non-existent benefits and concrete, likely, and easy to measure risk. They did use the arrogant and paternal approach of big tech company, though.

Based on the figures shared in the article, it smells like the district had an objective of saving some cash, while getting some attention for saving high schoolers from sleep deprivation. To meet the goal you have a few strawman arguments that would waste time or money, then settle on a solution that met the cost target, using difficult to argue with rationale like racial equity as an justification.

It would have made more sense to slowly introduce changes, and perhaps measure the stated outcome before disrupting everything. Given the really high cost of daycare in Boston, it seems unconscionable to force parents into situations where you need a much larger block of afterschool care.

</comment><comment><USER18> How little the health of students counts compared to the whims of their parents.

When did it became a right for parents to put their kids on a bus? They wait on the sidewalk, the big yellow truck comes by, they get on it. It's not that hard. I managed to do it without parental intervention every day from 2nd grade on (legally required before that where I grew up), because my parents' work schedules conflicted with the bus schedule.

And I'm not some old-timer complaining about kids these days, I'm < 30 and I still remember being completely unable to fall asleep before 1am as a teenager and being expected to wake up at 6:30 and go work for 14 hours a day. On behalf of their kids, fuck all of these parents.

<comment><USER19> Student health is very directly dependant on parents having a job.

Shuffling schedules makes things very bad for parents with few opportunities (due to having insufficient negotiating power in the labor market).

And there are certain things to do with kids in the morning, other than putting them on the bus.

That said, I got only a wake up from Mom and Dad when I was in elementary school, and later only the alarm clock did that.

</comment></comment><comment><USER20> > _Sorting through 1 novemtrigintillion options — that's 1 followed by 120 > zeroes —_

"Trying 10^120 options..."

We can stop padding our writing to make page length and column inches now. Digital media has a page area that is exactly as large as you need it to be.

If you're a journalist, even in long form stories, your working vocabulary is essentially the 3000 most-used words, and anything outside that should be easily understood from context alone. If you have to follow a word with its definition, you need to write something else. I don't know who edited this, but their iron palm of author-correction should have started the smack after "novem" and finished it before reading to the end of the "illion". A large number doesn't need a large word to describe it.

The essence of the problem is this. Balance the following factors:

(1) Supervise the children of working adults, without interfering with their work day.

(2) Transport those children between their homes and their schools, at minimum cost.

(3) Teach the kids how to be working adults after they graduate. (3a) Prepare a fraction of the kids for further education, to associates or bachelors.

In light of research into school start times as a factor of academic performance, they asked some MIT grad students to improve on goal (3) by giving high-school students later start times, with minimal impact to (2) from the new bus schedules. The algorithm devised to do so failed to sufficiently account for goal (1)--with all of its obfuscated hidden requirements--which made the whole plan fail.

They simply forgot, or never knew, that the primary purpose of public education in the US is to allow both parents to work outside the home, and to subsidize companies that have extended business hours with state-provided supervision for the children of their employees--a benefit usually paid for by the employees themselves via the property taxes on their homes.

The technical solution is easy. The political solution, which includes an admission that this is one of the goals baked into the public schools system, is nigh impossible.

<comment><USER4> I think "novemtrigintillion" was just a harmless joke about this very large number of possibilities, nothing too serious about it, I also had to Google the word I doubt anyone knew it.

> (1) Supervise the children of working adults, without interfering with their > work day.

That is indeed an important objective. I want to underline that it is impossible to achieve it in practice. Each parent has a different life with their own constraint, but each school can only have one time. The complexity of school assignment and start time choice is to find a way to do as well as we can. Unfortunately to the best of my knowledge, there is no perfect solution.

<comment><USER20> That's not strictly true. The schools each have one time when mandatory attendance starts, and one time when mandatory attendance ends, but they all open their doors earlier, and close down later, when the student presence is still _permitted_. The bus schedules revolve around that 90% of kids that show up just for class and then leave for home afterward, but if there is a local need, it is usually _technically possible_ to fill it. It just takes money. The problem is that the need and the money only rarely intersect.

Some school cafeterias even serve breakfast--mostly for kids with subsidized meals, who may not be able to eat regularly otherwise. That is state or federal money available to open earlier. Youth diversion program money can keep a school open later. It is entirely possible for a kid to be at school continuously for 12 hour intervals, every weekday, with no additional burden on the local taxes. Meanwhile, in the suburban schools, the clubs and extracurricular activities are powered by fees paid by the parents directly, and some kids get picked up and dropped off by private cars, as part of their parents' commutes, never even seeing the inside of a school bus.

<comment><USER21> You're right that public schools in Boston and elsewhere benefit from a rich ecosystem of after-school programs that allow students to continue learning outside the classroom (and yes, give parents more time to work). Adjustments to school schedules also impact these after-school programs, especially ones that enroll students from several schools with different schedules.

</comment></comment></comment></comment><comment><USER22> Exactly. I was working on some machine learning code when I realized that there were implicit moral choices in all machine learning results. Every dataset has implicitly made choices about data to include or not include. Every "weighing" algorithm, even if emergent, is choosing "values" to weigh or not weigh. Now I see data in a whole new way - and find that I can easily dismiss most conclusions, since they represent value systems which are very distant from mine. (Most often, they represent a value system based on profit - effectively keeping others down rather than lifting others up. How many people even noticed that costs were a major consideration of the article? We are so accustomed to our value system of profit over people that we fail to look at the system as a whole - and consider the incredible wealth of our society and wider impacts of actions.)

<comment><USER23> Most people don't get it as they don't understand reason behind their "reasoning" \- usually driven by feelings, instincts (biology) and default modes they learned from their parents, friends or at school. So implicit choices made for them already ("common sense") cover the reasons about what really drives them and these are completely out of their radar, but we have to cope with them when we want to get anywhere near automated intelligence and morality.

</comment></comment><comment><USER24> It's not mentioned in the article, but Julia was used to solve the huge optimization problem for this project—specifically, the JuMP optimization package [1]. This SIAM article has more technical detail: [https://sinews.siam.org/Details-Page/a-school-bus-trip-to- th...](https://sinews.siam.org/Details-Page/a-school-bus-trip-to-the- crossroads-of-policy-and-optimization). This seems to be a preprint of the paper that may describe the algorithm used in Boston, although it seems to talk more about the well-known New York taxi data set: [http://web.mit.edu/~jaillet/www/general/travel- time-18.pdf](http://web.mit.edu/~jaillet/www/general/travel-time-18.pdf).

[1] [https://github.com/JuliaOpt/JuMP.jl](https://github.com/JuliaOpt/JuMP.jl)

[2] [http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtm...](http://www.nyc.gov/html/tlc/html/about/trip_record_data.shtml)

</comment><comment><USER25> One thing many programmers fail to realize is that almost all problems in the world are ultimately political, not technical. Data analysis is almost always a tool, not an answer.

The hardest job in the world is getting a large group of people to all do something. The way you message something can be as important as what you say. If I was working on a major schedule change project like this, I wouldn't even tell people about the algorithm. That's just a tool to help you arrive at a schedule. People don't want to feel like their life is controlled by an unfeeling machine even if the result is better for them.

I'm not saying this particular situation was winnable. But I've seen this kind of thing happen over and over in the tech world.

<comment><USER26> Certainly there are an awful lot of startups that fail over issues like this. They either invest massive effort into seeking technical fixes that don't exist for human problems, or they find genuinely superior technical answers that are impossible to achieve - because they upset key parties, or because the cost of change is too high, or because they just sound too damn _silly_ to sell people on.

But in this case, I'm not sure there was anything to be done. (As you acknowledge - I'm not disagreeing, just looking at the point.) Two grad students whose background was overwhelmingly technical were brought in to provide a technical solution. They had enormous amounts of logistical information, but it's not clear they had social/political information about their task, and certainly they had no control over messaging and notification.

The outrage appears to have been less about the use of an algorithm than about massive disruptions to schedules. It's a predictable outcome - school start times are largely set around common parent work schedules - but it's also an irreducible one. The desired outcome _was_ the source of the anger, however much the computer derivation added insult to injury. Doctors have been calling for these changes for years and been utterly ignored. The school district I grew up in tried something a lot like this a decade ago, with no fancy algorithm, and was slapped down with similar fury.

At a certain point I think the error was not the superintendent seeking a technical solution to changing start times, but seeking a solution _at all_ on a topic where parents didn't want change.

(If I were to _really_ get inflammatory, I might mention that school is a classic principal-agent problem, and the proposal failed because it tried to trade the agents' convenience for the principals' health. But that's another, uglier debate.)

<comment><USER11> >(If I were to really get inflammatory, I might mention that school is a classic principal-agent problem, and the proposal failed because it tried to trade the agents' convenience for the principals' health. But that's another, uglier debate.)

Or, at least (to phrase it in a slightly less negative way) to trade relatively incremental, diffuse, and somewhat abstract benefits for the students with specific and sometimes disruptive change for parents.

Furthermore, just about any change to an accepted status quo--even if it's arguably a mild net positive--is going to have a lot of vocal critics. Those who like the change will mostly not feel very strongly. Those who don't like it or have just learned to live with the status quo will often hate it.

</comment></comment></comment><comment><USER27> I'm not surprised it failed, with such drastic changes. Why couldn't they add a constraint of no more than 15 minutes change and reapply every year for 5-10 years until they reach a point they are happy with?

<comment><USER4> It is typically very hard for the parents when we change a school start time, sometimes even when the change is small.

Doing small changes can help, but it is so politically complicated to change the school times that some districts prefer to do it all at once.

</comment></comment><comment><USER28> What are the downsides of having middle and high schools start at 9am with elementary schools starting at 7:30am? Basically a reversal of what is in place today.

Just go through with one fell swoop and swap every single starting time.

<comment><USER29> Where do you live that schools start at 07:30?

Also, it'd have a huge side effect: middle/high schools kids can go to school on their own. Many kids at elementary schools cannot. With this, you force parents to drop their kids off much earlier, which would fuck with their work schedules.

<comment><USER30> I'm from indiana. 7:30 is a common starting time. I'll add that most parents in the areas I lived didnt take their kids to school. A lot kids take the bus, either from home or from a daycare. Additionally, many schppls offer before and after school care, usually starting at 7 or 7:30 for the parents that will pay for it.

<comment><USER31> Indiana has the most complicated time zone history of any state in the US because of a long-running battle between those who want to be on Eastern time for synchronization with the East Coast and those who want to be on Central time because that's where the state's longitude puts it.

<comment><USER30> Yup. As far as I've witnessed, syncing with either Ohio/Eastern time or Illinois (Central time) is the main bits of the matter. Northwest Indiana is pretty in line with Chicago: Terre Haute (southwest-ish) more on Illinoise. Lafayette (central west/Purdue area) is in between. Central Indiana doesn't matter so much due to Indianapolis. Southeast is more in line with Louisville and the entire eastern edge, once you are outside of the easily Indianapolis area, is more reliant on larger Ohio cities. (Cincinatti, Cleveland, and to a smaller extent, Toledo). Ft Wayne I'm not as sure about, though I think they'd rather stay in line with Ohio's time.

I*m not entirely sure why it is a big deal: Either way, it is only an hour at this point. To be fair, it was more difficult before indiana adopted Daylight Savings time.

</comment></comment></comment></comment></comment><comment><USER32> Parents are a really tough constituency, especially the wealthier, former yuppie, homeowner cross-section. If you look at any major initiative to transform urban living, from housing to transportation to schooling you will find this demographic resisting with force.

I'm surprised that the school district did not foresee this resistance.

</comment><comment><USER33> I think something important is being glossed over by this article: "...distributing the best school start times more evenly..." Can someone explain to me what makes a start time "best"?

There was a section describing parents whose elementary school kids would have to start earlier, and they didn't like that because the kids would have to go to bed earlier and it would be tough to rearrange their work schedules to accommodate. But won't this also be true when their kids are in high-school? If they can't cope now, how will they cope then?

I always though it was obvious that elementary school and high school start times should just be swapped because in my experience elementary aged kids always wake up far earlier on their own.

<comment><USER34> "Best" is a combination of... \- minimizing cost to the district (number of buses, etc)

\- high school starting later in the morning (adolescents need more sleep)

\- ensuring adequate child-care options are available for little kids. Early start means more PM care, late start means both AM and PM care, etc.

Then you get compounding factors... \- high school athletics. Parents don't want high school to start too late, because then there is no daylight for football practice (yes, this is an actual argument I've heard... parents would prefer their kids play sports than maximize the kids education). \- race and income issues - either correcting existing disparities or avoiding creating them.

<comment><USER33> > "Best" is a combination of... - minimizing cost to the district (number of > buses, etc)

No. The paragraph I quoted implies that the parents have some notion of "best" start times that has nothing to do with the district's perspectives. But the article makes no attempt to describe what that is! (Other than what I already mentioned and questioned.)

Child-care, and not having your kids practice football in the dark is the kind of thing that makes sense.

But what does school start time have to do with race and income?

<comment><USER34> _The paragraph I quoted implies that the parents have some notion of "best" start times that has nothing to do with the district's perspectives. But the article makes no attempt to describe what that is!_

My best guess... people are generally change-averse and parents are generally selfish a-holes. Lacking irrefutable evidence that the new time is better FOR THEIR CHILD, parents will violently protect the status quo (even if it's obvious to outside observers that the district as a whole would be better off with the change).

</comment></comment></comment></comment><comment><USER35> I've experienced this pushback against the algorithm firsthand. I work in NLP, and I was asked to write a script to select data for annotation based on a number of criteria, including some automated balancing of a few factors. It turns out, this was very unsatisfying to some. It led to questions like "why is this document being selected, but not this one?" without an answer that was really satisfying. I ended up changing it to give total control to the person running the script, and removed the self-balancing feature. Since then, I pushback against any sort of black-box auto-selection sort of ideas, because I know that, while they might result in faster and ultimately equivalent results, people want control.

<comment><USER36> People don't want control so much as those _answers_ you yourself didn't get.

Nothing is more infuriating than not being told why you're being punished, why someone got accepted into a school when you didn't, or why a judge won't consider your appeal.

We can even handle injust answers-- "his parents are alumni that donate a lot of money." That sucks, but it's the answer.

But we can't handle not knowing. Denying people the ability to reason is one of the cruelest things you can do to them. The Amish figured this out centuries ago.

</comment></comment><comment><USER37> The constraints of the problem seem to have been poorly specified:

"...the algorithm would eventually propose — shifting school start times at some elementary schools by as much as two hours. Even more.

Hundreds of families were facing a 9:30 to 7:15 a.m. shift. And for many, that was intolerable. They'd have to make major changes to work schedules or even quit their jobs. And because their kids would have to go to bed so early, they'd miss out on valuable family time in the evening."

</comment><comment><USER38> A major portion of the problem is that schools aren't just about educating children; they're also about warehousing them as public daycare for workers. The hours matter for that.

If they hours didn't then it would be possible to have home-study for some time of the day and do all the bus transport mid 'school' day at various times for a massive reduction in resources.

</comment><comment><USER39> I'm unclear as to why this change was made between one school year and another. Unless I'm mistaken, there was no lead time. This seems like a big bang software rewrite.

This kind of massive change should have a year or two or even four of prep work. People can adjust their jobs and schedules much more easily over that kind of time than a single summer.

<comment><USER40> FTFA:

> District officials [...] released the new school schedule on a Thursday > night in December, with plans to implement in the fall of 2018.

That's more than six months. That's not really 'no lead time'.

It's also the first line in the article. Like, it's right there, at the top.

<comment><USER39> Sure, but 6 months is nothing. I'm talking about years. If parents knew that in 5 years the times would change, they could adjust their work schedules over that timeperiod. Especially if everyone in the whole district knew, even the childless.

<comment><USER41> There is still a single point where you have to go from, say, starting work at 9am vs starting work at 7am. And a lot of jobs do not provide this flexibility at all.

</comment></comment></comment></comment><comment><USER42> Can we please stop with writing out "... 50 bazillion zeros..." and just write using scientific notation? It's part of a basic high school education and is much easier to read and understand.

</comment><comment><USER43> >Even if the algorithm promised to reduce inequities, the upheaval involved — with nearly 85 percent of the district getting new start times — would hit black and brown families especially hard, the groups argued.

The article never really goes into this any farther. Was this just an empty point from the selfish wealthy families, or were they correct?

</comment><comment><USER44> Request was for a system that perfectly understands you.

Reality is, instead of a human misunderstanding you, it's a robot (like Rosie from Jetsons) misunderstanding you.

<comment><USER4> It makes sense that it can be easier to be misunderstood by a human than by a robot. And what about the case when any decision will always be bad for some people? I would argue that using (at least partly) an algorithm can add some fairness to the process, as without an algorithm systems can favor people who know the system the most.

</comment></comment><comment><USER45> Something like this just happened in the San Francisco school district. As of last month they decided to undo a key piece of an Ivy League authored school assignment algorithm and there's talk of scrapping the whole thing.[1]

If you know a parent with small children in SF you've probably have heard some consternation about the school lottery. Although the majority of families get their first choice, there are copious horror stories. Top economists were brought in around 2010 to design a new school assignment system.[2] They designed an algorithm. It tried to solve for a few goals: diversity, proximity and choice. They tried to make it "strategically simple" to avoid gaming the system.

The algorithm works like this: You rank the schools you want. Assignments are handed out according to a series of preferences called tiebreakers: First to siblings, then residents of low test score areas (to promote diversity), then residents of the neighborhood, then by lottery draw. If you didn't get anything on your list it'd assign you to the nearest school with space.

Then it did a neat thing: If it saw a mutually advantageous trade between families, it'd do it. If Family A got B's top choice and B got A's top choice they'd both get upgraded. It's called the Transfer Mechanism, commonly known as "swapping". This was meant to cut out complex strategies to get the school you want so you could just honestly list the schools you wanted in order.

Welp... After many years of horror stories of families getting assigned clear across town, the verdict finally arrived that the system utterly failed to improve diversity too. Here's what's going wrong:

1\. That low test score area preference (called CTIP) is disproportionately used by the few white and asian families in those neighborhoods to get out of their local school. It's a golden ticket to any school in the city. Perversely, what was meant to help diversify actually increased segregation while rewarding the most privileged families.

2\. The neighborhood preference (called Attendance Area) is woefully inadequate to ensure assignment to a nearby school. Many schools don't have enough capacity for their area, and if you don't get into your neighborhood school the other nearby schools might also be filled up by their own locals. That means you could be assigned clear across town to the nearest school with capacity -- which means not a very popular school either. No consideration is given to "bumping" a set of people over one neighborhood, for example, or otherwise more gently distributing the pain. (EDIT: I just noticed the original proposal had an "Overfill" preference to address this very issue.[2] Didn't get implemented.)

3\. Far from simplifying strategy, the Transfer Mechanism actually opens up a whole new kind of strategy. Clever families list schools with "swap value" in the hopes that they'll transfer their way into an otherwise inaccessible school. This is exacerbated by the existence of speciality schools that don't have an Attendance Area preference, i.e. language immersions and K-8 programs, creating a kind of niche swapping opportunity with AA-bearing families. This results in excessive "false" applications to these speciality schools, bumping more "true" applicants to their oversubscribed local school, bumping other locals, replacing them with swapped-in clever families, and creating a sense of injustice. Worst of all, this strategy is, you guessed it, disproportionately utilized by privileged families.

So last month SFUSD just decided to suspend the Transfer Mechanism.[4] This is big news and I'm not sure most families realize it yet. And there is a proposal in the works to rethink the whole system, taking inspiration from Berkeley.[1]

[1] [http://www.sfexaminer.com/school-board-member-proposes- scrap...](http://www.sfexaminer.com/school-board-member-proposes-scrapping- student-assignment-system-focus-community-schools/)

[2] [http://web.stanford.edu/~niederle/SFUSDBoardPresentationFeb....](http://web.stanford.edu/~niederle/SFUSDBoardPresentationFeb.17.2010.pdf)

[3] [http://www.sfusd.edu/en/assets/sfusd- staff/enroll/files/2019...](http://www.sfusd.edu/en/assets/sfusd- staff/enroll/files/2019-20/Transfer_Mechanism.pdf)</comment>


Everything about coronavirus in one place - <AUTHOR> https://coronavirus.rehab/ <comment><USER2> There isn't even an "About" page saying who has created this site. And none of the facts have any citations to reliable sources (or any sources, for that matter).

Why would someone entrust their health to a site created by someone whose medical or scientific credentials are unknown? Thanks, but I'll stick with the CDC.</comment>


Zune hardware apparently dead, software and services live on  - <AUTHOR> http://arstechnica.com/microsoft/news/2011/03/zune-hardware-apparently-dead-software-and-services-live-on.ars

<comment><USER2> Kind of a bummer - the Zune HD was one of the slickest and loveliest devices I've ever owned. I can't help but think if they had tried to sell them outside of the US they might have gotten a bit more coverage/visibility.</comment>


The eero programming language - a dialect of Objective-C - <AUTHOR> http://eerolanguage.org/ <comment><USER2> Objective-C is hands down one of my favorite programming language:

\- It's compiled, not interpreted. Even Java and C# are compiled into bytecode for a massive VM to interpret. Objective-C has no VM, it's pure binary + a shared library to implement the runtime. It also uses the very best compiler, clang, which gives incredibly helpful error messages, warnings and suggestions.

\- It's a strict superset of C. Even C++ does not meet this criteria. This means any valid C is valid Obj-C and behaves exactly the same way, in any Obj-C file. You can drop down levels of abstraction for performance, and can even write assembly if that's what it takes.

\- It has an amazing and fully supported debugger in the form of LLDB.

\- It's fully dynamic, allows introspection, duck typing and even monkey patching (with a little effort; method swizzling). Everything is an object, except for native C types.

\- It takes the right approach to memory management. Realizes that garbage collectors are abominations, and that managing memory is really the job of either the developer or the compiler.

\- It has the most fantastic concurrency framework I've ever used, in the form of `libdispatch`. Now, to be fair, it's a C library that ought to work anywhere, but practically it only works well on Apple's platforms and using clang.

\- Apple is moving in the right direction, cleaning up the language, removing annoyances and making syntax more succinct.

\- Header files. I think I'm on my own in liking this—but I think headers are amazing. They're a succinct and standalone version of a documentation file that is extremely useful to both developers and the compiler. Use them to describe well the public interface to your class, and you don't even really have to write documentation anymore.

\- Solid design patterns and convention-driven. These are getting better by the day, with the recent addition of closures to the language.

There's two major annoyances:

\- It's often needlessly verbose. Not in the syntax, mind you, which is just fine, but in the naming conventions. For example, `NSArray` has a method called `enumerateObjectsUsingBlock:` instead of simply `each:`. Add that up to every single name, and you get pretty ugly code—and good luck writing it with anything other than Xcode's context-aware autocompletion.

\- It's tied to Apple's platforms, and well not run on anything else. Now, I'm fine with Apple-specific frameworks and GUI frameworks (like QuickTime or UIKit) being Apple-only, but I'd really love to use the language to write a backend service, for which I'd only need Foundation & libdispatch, for example.

<comment><USER3> "It's compiled, not interpreted."

The Objective-C calls are not really compiled. They are dynamically dispatched at runtime in a very equivalent manner to an interpreter or via reflection in Java. You can read about it here:

[http://www.mulle- kybernetik.com/artikel/Optimization/opti-3....](http://www.mulle- kybernetik.com/artikel/Optimization/opti-3.html)

Quite far from the compiled C calls also covered in the linked article.

<comment><USER2> The presence of a runtime doesn't negate the fact that code is compiled to native machine code, and all the benefits that come with that. Execution speed is quite a bit faster than bytecode-interpreted languages such as the JVM, which in turns is orders of magnitude faster than fully interpreted languages such as Ruby. The code is compiled directly for each architecture the binary supports (choices these days being i386, armv6, and armv7).

C code in an Obj-C method is compiled to the exact same machine code as it would be, were it in a C function. Constructs such as ifs, loops, return statements etc are no different than their C counterparts, are are just as fast. Obj-C method calls are simply _compiled_ into calls to the ultra-fast runtime C function `objc_msgsend`.

<comment><USER4> The JVM compiles the bytecode into machine code, and it compiles the hotspots of an application into _optimized_ native machine code.

Java execution is split into two pieces. First is the interpeter, which is used to execute bytecode prior to it being compiled. The second is the compiler, which implements runtime optimized compilation of hotspots into native machine code, including the ability to make assumptions regarding types and then _uncompile_ hotspots if those assumptions prove false.

Before you say "ah ha, an interpeter!", it's also notable that the JVM's interpreter is _not_ an interpeter in the traditional sense (ala Ruby). Rather, the JVM's interpreter is an architecture-specific interpreter that decodes JVM bytecode and spits out unoptimized direct machine code based on a standard set of machine code templates. This is fast, but there's not optimized compiler, and so it's not nearly as fast as the result of the optimizing compiler that is run over the hotspots.

All that said, JIT vs AOT is a technical decision with mixed advantages. In theory, there are optimizations that can only be performed via JIT, based on runtime analysis. The simplicity of AOT can often provide runtime performance gains simply by avoiding the runtime costs of evaluation and compilation. JIT of bytecode allows for binary/library portability across different machines without worrying about rebuilding or shipping multiple binaries. AOT is somewhat more difficult to decompile compared to unoptimized byte code.

Mono compiles down AOT for iOS, in theory you could do the same with Java. GCC did so with their optimizing AOT gcj Java compiler.

</comment></comment></comment></comment><comment><USER5> Programmers "liked" Java because they were told to by Sun. Programmers "liked" C# because they were told to by Microsoft. Now, programmers "like" Obj-C because they are told to by Apple. In that regard, this seems like a step in the right direction...

But it's only a half step. If you look at what's happened to the other two languages mentioned above, they have evolved such that their runtimes are now more important than the languages they originally hosted.

What really needs to happen to Obj-C is for people to wake up and realize that the runtime is actually really nice. Combined with LLVM, one could make the case that the Obj-C runtime could compete with the JVM or the CLR.

(Of course, the one huge, massive, glaring omission is any sort of managed memory... Well, at least there _was_ a garbage collector at one point.)

<comment><USER4> First, I want to counter your use of "like" in quotes, as if programmers couldn't have perfectly valid reasons to like these languages.

I like Java for its low-cost allocations, sane implementation of constructors, and checked exceptions that prevent undeclared control flow behavior. The huge trove of solid-quality libraries and a general community focus on unit testing and documentation (perhaps in no small part driven by Apache) has been quite valuable.

I like C# for its type inference, relational algebra ala LINQ, reactive extensions, adoption of F#, and a general R&D focus on adopting language design from the functional languages.

I like Obj-C for the ease of which I can drop to C and assembly, and the ease- of-implementation inherent in Apple's GUI frameworks. That's about it -- there's a lot to dislike about ObjC.

All that aside, and given my own significant familiarity with the underlying runtimes, I'm trying to understand what you think is so advantageous about Apple's ObjC runtime. It is effectively an extremely simple dynamic dispatch runtime, reliant on the OS memory management combined with reference counting, zero support for any complex runtime state inspection (say, to support breaking reference cycles), and now with some C-derived glue for closures and compiler-emitable calls to support somewhat-automatic reference counting. The class registration system has hardly changed in 20 years, has no support for namespaces, the type encodings available at runtime are complex-to-decode- strings, and the whole thing is, quite honestly, the kind of rickety design you'd expect to emerge from C hackers in the late 80s early 90s, incorporating none of the advances in the field from either Sun/Java or Microsoft/C#.

ObjC predates the work on Strongtalk that led to the modern JVM, it either predates or fails to inherit from the language R&D outside of C, and predates the CLR runtime work done by Microsoft. It's a _DINOSAUR_.

I don't really understand where you see the runtime advantage here, and I spend nearly all of my time writing ObjC.

The only advantage I see to the ObjC runtime is that it's required to interface with their native libraries.

<comment><USER5> Perhaps a matter of taste, but it seems everything you dislike about the Obj-C runtime are the things I enjoy:

> It is effectively an extremely simple dynamic dispatch runtime

Yup! Just the way I like it. It's practically lisp-like in its minimalism. Just the minimum you'd need to get the job done.

> reliant on the OS memory management

This, actually, is one of my favorite points. Letting the JVM grab a giant allocation at startup is fine if all you're going to do with your machine is run JVM programs (i.e. a server), but it sucks when you've got multiple apps all trying to play nice together. The OS has a memory management system for a reason. I'd much prefer my runtime use the existing system, than re-invent the wheel (as it were).

> with reference counting

Right, well...I did mention that the lack of a GC kinda sucks. I suppose it's a trade-off that one must make if you are going to rely on the OS to manage memory. Still, I can't help but feel that some sort of opt-in system could be made to work at runtime.

> zero support for any complex runtime state inspection (say, to support > breaking reference cycles)

Of course, the flip-side to this is that runtime performance is more predictable, since the runtime isn't attempting to do anything overly complex. I can see how you might argue this either way: more runtime introspection eases the burden on language implementors, but it also is a sunk cost whether you want it or not.

> The class registration system has hardly changed in 20 years

 _"It seems that perfection is reached not when there is nothing left to add, but when there is nothing left to take away"_

> has no support for namespaces

I'm not completely convinced this is a problem domain that I want my runtime solving for me. The addition of two-level namespacing to Mach-O addresses the only time I can think that I definitely want runtime managed namespacing. If I want namespacing to be part of my object model, let me determine how it should work. (It's always mildly annoyed me that Java's reverse-DNS-style bleeds into almost every JVM-based language.)

> the type encodings available at runtime are complex-to-decode-strings

The type encodings are simple C strings!

> the whole thing is, quite honestly, the kind of rickety design you'd expect > to emerge from C hackers in the late 80s early 90s

If by that you mean that the central message dispatch routine is hand- optimized assembly for each platform the runtime is available on... I'll have some more of that, please!

 _Edit_ : Oh, and about the "like" part...I was being mildly facetious. There are aspects of all 3 languages that I enjoy, but I doubt they'd have become as popular as they have on their merits alone. (Well, ok, given the landscape at the time, Java's popularity could be said to be fairly won...)

<comment><USER4> > _This, actually, is one of my favorite points. Letting the JVM grab a giant > allocation at startup is fine if all you're going to do with your machine is > run JVM programs (i.e. a server), but it sucks when you've got multiple apps > all trying to play nice together. The OS has a memory management system for > a reason. I'd much prefer my runtime use the existing system, than re-invent > the wheel (as it were)._

The OS memory management system is as general-purpose as possible. At the kernel/process interaction level, the APIs are thin abstractions on the underlying VM page mapping system. Below that, at the malloc level, malloc is designed to be as general purpose allocator as possible, without introducing complexity unsupportable in C, such as migrating allocations across generations.

The JVM's lack of ability to rededicate pages to the OS is a failing of Sun's particular implementation, and is not strictly inherent in the design of generational collectors.

Your argument dismantles Sun's architectural choice when used on mobile hardware, but does not address the relative merits of alternative allocation/collection schemes.

> In regards to the class registration system: _"It seems that perfection is > reached not when there is nothing left to add, but when there is nothing > left to take away"_

That response has little substance. It's not perfect, or even great, it's merely functional. I would be enthralled if Mach-O two-level namespacing worked with ObjC classes, but it can not.

> _The type encodings are simple C strings!_

They're C strings, not particularly simple. Try decoding (with lackluster documentation) a complex structure return value. Modern runtimes use much more cleanly structured, cross-referenced data here.

> _If by that you mean that the central message dispatch routine is hand- > optimized assembly for each platform the runtime is available on... I'll > have some more of that, please!_

No, that's not what I mean. You'd find just as much complex hand-optimized assembly code in other runtimes, likely more.

I'm referring to design choices such as the use of unnecessarily complex data structures with minimal if not outright missing API to access them, poorly abstracted implementation details (such as exposing C string type signatures as the highest-level representation of a type encoding), minimal/missing/poorly-defined metadata.

An example is the failure to encode type data in blockrefs in the first public release of blocks for ObjC, which made it impossible to implement imp_implementationWithBlock(), due to the need to differentiation between stret vs non-stret return types and select the appropriate trampoline. This required changes to both the compiler and the runtime, and meant that prior to those changes' introduction by Apple, it would have been impossible for an external entity to implement similar functionality.

This sort of hackish minimalism is the polar opposite of the careful considered and long-term focused design that Microsoft (and even Sun) applied to the core of their platform. Compare the completeness (and longevity) of the JVM Virtual Machine specification to the ObjC runtime. Over roughly the same amount of time, Apple has had to introduce complete ABI-breaking fundamental changes of to their runtime to implement extremely basic language enhancements. In contract, the JVM specification has not, to my recollection, been broken once over the course of 20 years. Additions have always been forward-compatible.

An example of the above would be the addition of non-fragile base classes through the use of minimal ivar access indirection. This required a wholesale breakage of the entire language, and thus could only be introduced on 64-bit Mac OS X and on iOS.

Apple's language and runtime design is hackish at best.

<comment><USER6> I don't buy the comparison. It's a _lot_ easier to avoid breaking things when you're not compiling to native code, but compiling to native code is one of Objective-C's biggest advantages.

<comment><USER4> In contrast, I don't buy that dichotomy. The Objective-C runtime is runtime- heavy, generates a slew of runtime-interpretable data, and yet is compiled "natively" insofar as the body of functions-nee-methods is native.

Instance variable access from native code is done through indirection with metadata maintained on their type and offset, dispatch is done through indirection from native code using class metadata, instantiation is done through indirection using the global registration of class metadata.

The problem has consistently been in the non-forward-looking design of that structured data, not in the fact that they generate method bodies as native machine code.

<comment><USER6> Since I've been tired the last few days, here's a late reply:

Direct pointer offsetting of fragile base classes and statically generated copy/destroy code for blocks in lieu of type information would be fairly unthinkable in a managed language, whose bytecode probably wouldn't be low level enough to even express those designs; it would still have been a _good idea_ to think ahead and use indirection for ivars and include full type information in blocks, but managed language designers never really had the chance to make such mistakes in the first place. For other Objective-C changes, like garbage collection, the changes to code generation would have been unreasonable to make "in advance", but it's hard to imagine an analogous change in a managed language that would require an ABI break. Though Objective-C could have done better, it's a bit unfair to compare it to something like the JVM.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> While it looks interesting and probably has some use cases, the syntax puts me off a little. YMMV. Yes, Obj-C has many brackets. But I find them supporting reading by grouping relevant elements together. I assume if you dislike lisp like languages, eero might help in this regard.

What I particularly don't like are the tailing return types.

I also assume apple is actively working to reducing the Obj-C verbosity to some extend.

Regarding the website, I miss a "get started" link. How do I take it for a quick test-drive?

EDIT: It sais: "Eero is a fully binary- and header-compatible dialect of Objective-C". Does this mean, I can write a module in Eero and have it derive the correct header files for me? Or do I need to re-write the header file to be consumed by (legacy) Obj-C?

<comment><USER8> I think Apple might want to switch to Ruby in the future. Some Apple employees are still actively working on MacRuby and it is actually possible now to create iOS apps with Ruby through RubyMotion.

<http://www.rubymotion.com/>

<comment><USER9> I won't decry having options, but I am not sure what Apple would stand to gain by switching the first-class language of their platform to Ruby. If you look at any RubyMotion code, it ends up being an almost line-per-line copy of the equivalent Objective-C code.

Given that the languages come from the same lineage, it is not even a big jump to switch between them from a developer's point of view. The thing that really stood out when I was learning Objective-C is that it essentially was Ruby, just with some C thrown in. I often wonder if people go in thinking Obj-C is some kind of worse version of C++ and then miss what the language really has to offer. While it is certainly not perfect, I'm constantly amazed at how elegant the design of the language really is.

Ruby could shine if Apple were to create a whole new set of APIs based around the language, but that would mean throwing away nearly 25 years or work. It would be a tremendous undertaking for what could be positive gain, but is just as likely to introduce a whole new world of problems, especially in the early years.

Official support for Ruby would certainly be welcome, but I don't see benefits in outright switching; not without also removing the Objective-C APIs from the equation and creating a whole new platform that centres around Ruby.

</comment></comment></comment><comment><USER10> Most of the comments here are way off base, focusing on the relative worth of the objective-c language, rather than the value of Eero for developers who have no choice but to use objective-c, regardless of how good they think it is or isn't.

If you haven't already - I highly recommend following the link. RubyMotion was somewhat interesting, but really didn't feel like a massive improvement over plain old objective-c, especially once you factor in all the Cocoa APIs.

However, Eero looks amazing. The syntax used represents a vast improvement over straight objective-c or RubyMotion. Take a look - it's genuinely exciting.

</comment><comment><AUTHOR> The examples struck me as looking a lot like Go and I found a few similarities:

\- Local type inferencing (i := 100) is identical.

\- No parentheses for control structures.

\- Lack of semicolons.

\- Ranges in array enumeration (albeit with different syntax).

</comment><comment><USER11> The problem, as RubyMotion and Monotouch have both demonstrated, is that no matter how much you change the language your code is still dominated by calls into the Cocoa APIs, and that's where a lot of the verbosity and ugliness lies (IMO).

<comment><USER12> You are entitled to your opinion, but I will disagree.

The Cocoa/Cocoa Touch APIs are probably the best I have ever used. Rarely do I have to dive into the documentation thanks to the self documenting method names. The consistently and logically applied conventions (paired with autocomplete) mean I can usually use intuition to "feel" my way around. If ever I need to read the documentation, it is also some of the best around.

</comment></comment><comment><USER13> I can definely see myself using this over objective-c if it proves stable enough for production usage.

<comment><USER14> Agreed. Much nicer on my eyeballs.

</comment></comment><comment><USER15> Pretty rad that eero forbids variable shadowing. It would be neat if more languages start doing that in the future...

<http://eerolanguage.org/documentation/index.html#noshadowing>

<comment><USER16> Err, sounds like a weird thing to do, and as they mentioned, is more likely just a limitation of their inferrence engine. Preventing variable shadowing leaks implementation details from inside functions/blocks and mos tlanguages do just fine with appropriate warnings and so on.

</comment></comment><comment><USER17> It looks nice, but I can't help but wonder why not go all the way to Smalltalk instead?

        helper := FileHelper new.  "declare variable 'helper' via type inference"

        files := []  "empty array literal implies mutable"
        files addObject: (helper openFile: 'readme.txt').  "can group message in parens"

        files do: [ | FileHandle handle | "all objects are pointers, so no '*' needed"
    	  self log: 'File descriptor is %@', (Number)(handle fileDescriptor) ).
    	  self handle: closeFile ].

        ^ 0

Of course, you'd still have to solve the lack of syntax for defining classes and methods, but there are a couple solutions to that problem out there already.

<comment><USER18> A Smalltalk compiler for the Objective-C runtime exists here:

<http://etoileos.com/dev/docs/languages/smalltalk/>

<comment><USER17> Cool. Does it work with Cocoa on OS X?

</comment></comment></comment><comment><USER19> Interesting, especially given how I was listening to John Siracusa's two Hypercritical talks from 2011 where he points out that replacing Obj-C (or any language) with bridges is insufficient. I hope he might weigh in on his thoughts of eero in the future.

</comment><comment><USER20> Looking through the docs, it does look incredible, perhaps the Perfect® language for my tastes.

But the old man in me says it'll never stick.

</comment><comment><USER21> Finally!

</comment><comment><USER22> > Python-like indentation

Oh god, please no.

<comment><USER13> The syntax reminds me less of python and more like coffeescript. I loathe python but there's a certain .. je ne sais quoi with much of the operators and syntactic sugar removed. Almost like natural language!

<comment><USER23> That's the Smalltalk heritage of Objective-C shining through. Smalltalk was actually intentionally designed using Human Interface notions to be friendly -- even to the point of being used by grade school children.</comment></comment></comment>


Man's rare ability may unlock secret of memory - <AUTHOR> http://www.cnn.com/2008/HEALTH/conditions/05/07/miraculous.memory/

<comment><USER2> "Give Brad Williams a date, and he can usually tell you not only what he was doing but what world events happened that day ... it seems to indicate there's no -- or not much -- intentional calculation going on"

It seems to me that his memory is indexed by date.

</comment><comment><USER3> Why is this here? Put this on reddit or digg but not here.

</comment><comment><USER4> Shades of Jorge Luis Borges' 'Funes, the Memorious':

<http://io.uwinnipeg.ca/~morton/bigidea/funes.txt>

<comment> daniel-cussen Upvote Borges reference!</comment></comment>


Use Your Powers for Good: Work at Causes.com - <AUTHOR> http://causes.com/join_us

<comment><USER2> I really like what you did with your images :) I wish I lived in SF :/

<comment><AUTHOR> It's never too late to move!

</comment></comment><comment><USER3> Interesting. It even has Sean Parker as co-founder: <http://www.causes.com/team>

<comment><USER4> Interesting page - two "founders" and two "co-founders".

</comment></comment><comment><USER5> makes me want to be at the hack-a-thon even more! non-business hours plz!

<comment><USER6> We're going to be hacking into the night, so you're welcome to show up anytime this evening! Second dinner is at 10pm, and we're at 88 Kearny.

</comment></comment><comment><USER7> Haha, that's awesome!

<comment><USER6> My favorite prop is the pipe. So sophisticated!

</comment></comment><comment><USER8> Keep playing to see more cool stuff...</comment>


Alternative to new MacBook - <AUTHOR> http://www.santech.eu/notebook/g49-series?sort=p.price&order=DESC <comment><USER2> Hey I've got a good alternative (for developers, I mean): buy an iMac in top configuration, and buy a new MacBook. Then use the MacBook to connect to the iMac via share screen. Best of both! You get the portability of the laptop, with the performance of the iMac.</comment>


Ask HN: What's it like working at Apple? - <AUTHOR>

So I went to a job hiring event on Sunday and I got a call sunday asking to comeback tomorrow for an interview. From the way it sounded on Sunday they said if I got a call asking to come back in I was basically hired and they just wanted me to come back to see where I would fit in at. So I was wondering what exactly is it like. Would I have to own my own apple product because I don't, but I have knowledge on them because I have family members that have them and I'm the family IT guy. <comment><USER2> I have a couple of friends working there. It's pretty dry corporate culture. Expect being overworked sometimes. But on the bright side they pay really well and the RSU will be a lot of money. At the end of the day it all depends on who are you working with not the company itself. I hope you get lucky and get into a good team.

<comment><USER3> OPs post history puts him as a college sophomore - his pay package won't include RSUs. That being said, it really depends on the team, and the manager - just like any other big company.

And no, you won't need to own your own Apple gear.</comment></comment>


Ask HN: What are you grateful for? - <AUTHOR> In life. I was going to ask "What are you most grateful for?" but why make people pick just one thing, or have to choose which is #1. <comment><USER2> Right now I am just grateful to be alive and healthy, yes things could be better but you have to look at the small things first.</comment>


Symbian Completes Biggest Open Source Migration Project Ever - <AUTHOR> http://www.symbian.org/news-and-media/2010/02/04/symbian-completes-biggest-open-source-migration-project-ever

<comment><USER2> Ok, so what do I have to do in order to fix some things, recompile and upload a new version on my Nokia E71 ? Is this even possible ?

Looking forward to seeing Symbian-based distros for our phones but I have the feeling this is more like the end of the road for Symbian, not the beginning of an open-source explosion.

<comment><USER3> I'm pretty sure it's just Symbian, not S60, the UI platform. So you can not build E71 firmware with what they open sourced.

<comment><AUTHOR> No, the Symbian open source release includes S60 as well. (Although S60 is not long for this world; it's going to be replaced by a new Qt-based layer in Symbian^4 next year.)

That said, porting Symbian^(x) to the E71 would be a major effort. The S60 5th Edition UI layer seems to assume a screen resolution of at least 640*360. Even if that were resolved, I'm not sure how one would get the software on the E71.

Apparently some Samsung users have created customized Symbian firmware upgrades, so maybe it's a more realistic prospect for S60 5th Edition devices.

<comment><USER2> So this means that the open-source announcement is useless for me (and presumably other users having older devices -- if you could call my less than 1 year E71 old).

Who benefits from this announcement ?

I would love to see open-source "cell-phone" distros but I think they won't happen very soon.</comment></comment></comment></comment>