text:
Anime Origin Stories
An interview project.
Posted on November 1, 2017 November 1, 2017 by Lauren
#119: Austin
Location: Cambridge, Massachusetts
When did you discover anime? Share as much as you remember. I will separate this into three discovery periods: before I knew of the term "anime," when I first learned about the term anime, and finally my rediscovery of anime and what it can really encompass.
Until I entered high school in America, I grew up in Hong Kong. When I was still an elementary schooler, one night I was watching TV and airing on the TV was some cartoon movie that enthralled me. It was in a Cantonese dub (of which I understood basically nothing) with rough English subtitles that would appear once every couple of lines. Eventually it was past my bed time and I had to submit to my parental overlords who would have just forcibly torn me away from the TV otherwise. It killed me that I had no idea what this movie was even called (much less that it was a Japanese cartoon) and I only realized much later after I had learned of the term anime that this movie was in fact Nausicaä of the Valley of the Wind. I went through the same experience again from half-watching Princess Mononoke, also presented with a Cantonese dub and shoddy English subtitles during those same childhood years.
A 'Legend of the Galactic Heroes' cel from Austin's collection.
I did not actually learn of the term anime until a friend of mine introduced me to Naruto during my middle school years. Today this is probably one of my marks of shame from my earlier days as an anime fan, but I rewatched the original Naruto TV series including filler at least three times. It didn't take long after Naruto to check out the other Shonen Jump fare, and then I had a phase of watching a bunch of shoujo anime after getting a bit tired of shonen fighting stuff. After that I proceeded to much of the male otaku-pandering harem series. I began to watch most of the airing series that was being fansubbed at the time as I proceeded into high school until I reached major anime burnout. The show that really broke me was K-On. I had a revelation that the shows that otaku were hyping up as the "must check out" shows or the "best anime of the season" just did not really appeal to me anymore. Even those shows aside, after being burned too many times by anime with great beginning episodes that would then be completely unable to sustain their premise for their full running length (Gonzo anyone?), I was really questioning whether or not my heart was really in anime anymore.
My re-discovery of anime I have to credit 100% to the Anime World Order podcast. I very well may not be an anime fan today if I had not found their podcast during my high school burnout. It really opened my eyes up to just how many gems there were back in the '70s/'80s/early '90s and to get in the habit of just trying to learn more about who is actually involved in creating the anime I watch and love. It also really opened up my eyes to the fact that anime is not just Shonen Jump adaptations or a cesspool of otaku in-jokes and tropes, but it really does have the capacity to take on a much wider diversity of fictional material. Helen McCarthy summarized this well on the AWO interview with her (at the 5:58 mark):
"Anime is an adventure playground and like any adventure playground you're only going to get out of it what you take in with you […] if you go looking to try new things, explore new genres, and look around for challenges, then anime is going to provide that."
The pursuit of challenges is what keeps my anime passion alive. Every time I see a side of anime I've never seen before, my otaku expiration date pushes back even further. My hope is that I will never hit this expiration date, so long as I remember that watching anime does not have to be limited to the titles that trend with the anime fandom at large.
What appealed to you about anime when you first discovered it? For my elementary school story, the main feeling I came away from having half-watched both movies was "Wow, I did not know a cartoon could portray such a compelling story." My prior exposure to cartoons was things of the nature of some of the older Walt Disney cartoons, Tom and Jerry, CatDog, and Rocko's Modern Life to name a few. While I enjoyed those as a kid, we can all see that these are comedic endeavors that completely unlike the aforementioned movies. Those movies imprinted upon me a much deeper, lingering feeling of fulfillment.
Although Naruto marked my initial foray into anime, I have actually fallen completely out of caring about it at all. That being said, when I first watched it I really thought it was a fresh breath of air from all the Western cartoons done in episodic format. I actually love a lot of the DCAU cartoons but I feel like there is a limit to how far or deep you can take a story when constrained by that format. The serialized nature of Naruto and other series like it grabbed my attention and I grew a much stronger attachment to characters from long running series like this. This is not to say I necessarily dislike anime that take an episodic format, but an anime series portraying a single story that runs for the length of one or more cours returns a particular feeling of immense satisfaction when done well. I can't say the same for most of the Western cartoons I watched when I was younger. I was also fascinated by many of the cultural differences from Japan that were exhibited in some of the anime I watched during this time, and so there was definitely an appeal of adventuring into a culture very different from my mostly Western sensibilities.
A 'Galaxy Express 999' cel from Austin's collection.
The appeal of anime since my rediscovery of it has taken a much more fascinating turn. Prior to this point I did not really take to the cel-animated style of animation but I've grown exceedingly fond of it the more stuff I visit from the '70s and '80s. It saddens me to think that it practically a dead art at this point. (If I'm not mistaken Sazae-san was the last anime to use cel-animation and if the production for Sazae-san cannot keep it up… well nothing else can right?) The amount of artistic and narrative diversity that was possible during the '80s due to the booming economy in Japan at the time is something that I have not really found in anime of recent times; with any luck crowdfunded anime will continue to carve out its own niche though. That aside, I also have bizarre theoretical nostalgia for the '80s which my parents find both puzzling and amusing.
Just to clarify, even though I have primarily been focusing my attention on anime from the '70s and '80s since my rediscovery, I do think that currently anime is doing pretty well and when I do finally get around to watching some more recent anime it is not that hard for me to find something I would like. I am just in no rush to watch anime that everyone is talking about, and I am hesitant to watch shows as they air for fear of being let down by the end.
You grew up in Hong Kong and then Cambridge. Can you tell me how anime fandom was different in each city? I should clarify here. Until high school I grew up in Hong Kong. During high school I was in New Jersey. For undergraduate schooling onwards I was in Cambridge. So I'm not really sure I can say I "grew up" in Cambridge since I was already in college at that point.
As someone that cannot actually speak Cantonese (I can understand a very small amount), my experience is unlikely to be representative of actual fandom in Hong Kong. I also did not attempt to interact too much with fandom in Hong Kong. I think what stands out to me the most over there compared to the states are the sort of properties that were represented. I can remember walking in random malls and seeing illustrations and merchandise for Astro Boy casually in areas. Even more so for stuff like Doraemon. Doraemon would be broadcast dubbed on the Cantonese language channels. Basically you can clearly see representation of the set of anime or manga properties that are huge across East Asia but are virtually unheard of in the West. Many of these properties are popular to large audiences, not just self-proclaimed anime fans. As far as people at school (I went to a British private school taught entirely in English so again, possibly not representative), there were kids who were into those huge Shonen Jump titles like Naruto, Bleach, One Piece, and so forth. I do recall someone reading a localized (into written Chinese) Sgt. Frog manga volume. I wasn't even aware that this was released in the states or that it had a following until checking just now. In my head I had thought of this as another "popular in East Asia but not in the West" property.
I went to a boarding high school in New Jersey and I didn't leave campus much because I was lazy and going to town required more walking than I cared for at the time. So I can really only comment on the situation at school. I think besides what I've already said, it appeared to me that there wasn't a lot of interest in an organized club setting for anime (although I feel like it could have been different if the school actually allowed for non-athletic and non-theater extra-curricular activities). There were however people with at least some kind of passing interest in anime; their presence was not very visible though so to this day I'm not entirely sure how many people actually cared about anime. This is when I really understood that there's a whole population of people who consume anime but do not speak about it whatsoever.
College in Cambridge was a pretty huge letdown as far as anime fandom is concerned. Admittedly, if I was still the same fan I was when I was getting into this stuff I would have fit right at home. There were a lot of people to whom anime is essentially a bunch of memes. While I do actually think one great aspect about anime fandom is that people can celebrate it in so many different ways, it was a letdown for me that I had so much trouble finding people who would also want to take it seriously. I'm not gonna pretend like every anime is some kind of cinematic masterpiece, because that is not true at all. At the time it struck me as strange that anime fans had so little interest in seeking out things worthy of that kind of recognition. Stepping aside from my biases, there's definitely a lot of that internet awareness of anime fandom that would be represented by anime fans at my school. So if you were the sort of person who was constantly on top of the zeitgeist of anime fandom, quickly jumping to one hot otaku property after the next, you would have had a great time.
A 'Black Jack' cel from Austin's collection.
You spent a lot of time gravitating toward much older anime. What appealed to you about those over more modern titles? When I first saw a non-Ghibli cel animated anime, I was still in my relative infancy as an anime fan and the aesthetic did not appeal to me at the time. It's funny that since then I now tend to gravitate much more to older titles. Probably the biggest driving force during my transition to older titles is wanting to get away from the glut of moe titles that kept getting pumped out. Before that point most of what I was watching was that moe stuff and at first I thought it was quirky and fun but later on I realized I was just lying to myself about liking that stuff anymore. There can be shows with moe elements that can still be good provided other quality aspects (plot, characterization, etc.) are there. However, the balance wasn't really there when I was really getting sick of it. Nowadays anime seems to be doing a lot better than simply completing a checklist designed to cater only to the moe fanbase.
So older anime had a lot less moe stuff crammed into it. On the other hand, there's a ton more mecha stuff there which I previously did not care for. I no longer have any resistance to mecha shows now and do enjoy greatly the ones that I have seen. I still don't think I would call myself a huge mecha person though. I do really like the level of detail you see with some illustrations of robots. It is a shame that the animators who can actually animate robots in 2D are dwindling out.
The hand-crafted feel of cel animation versus the technically cleaner aspects of digital animation is something that I enjoy greatly. It's really great whenever some window shatters or a building gets demolished and you can see the individual bits of debris and rubble. People spent weeks painting cels for something that amounts to a gorgeous second long shot. Whenever the camera perspective switches I'm blown away because everything in the shot has to be redrawn each frame. The warmer color palette gives a different vibe than that of modern titles. In any case, for many of these aspects there's not necessarily a technical reason you couldn't do these things in digital animation. However, there is one thing that was certainly different in the '80s and that was the economy in Japan.
The amount of money that got pumped into the anime industry as a consequence of the '80s bubble economy would allow for these super detailed and time-intensive shots. Not all old anime is like this of course, but at least the possibility was there. Besides that, the crazy amounts of money that would get thrown around would enable the production of strange, extremely non-merchandisable titles such as Angel's Egg, To-Y, and Bobby's Girl. Success or not, there is something fascinating about creative output in anime unrestrained by commercial considerations. If you wanted to pick a single decade to look for as much anime that is unlike anime you've seen before, unquestionably the '80s is the place to go.
Putting aside my preference for the aesthetics or the experimental stuff of the time, if I were to try and sell someone on the concept of going back and checking older anime it would be that titles that have withstood the test of time are worth checking out. It's hard to identify if an anime title is going to have any staying power at the height of its popularity. So the only reasonable way to unbiasedly test this I think is to simply wait and see. Especially nowadays, fans move rapidly from one show to the next. Here's are modern examples of things I don't think pass the test of time. How many people honestly care about The Melancholy of Haruhi Suzumiya anymore (well, they weren't doing themselves any favors with that second season)? How about Lucky Star? On the other hand, people will still bring up Akira as one of these cinematic masterpieces. Somehow fandom over Legend of the Galactic Heroes has persisted for all this time despite only very recently getting an official release for the first time. Old school fans still talk about Bubblegum Crisis. A couple of years back Carl Gustav Horn cared enough to assemble writers and put together a gorgeous 25th anniversary fanzine for Royal Space Force: The Wings of Honneamise. To me, that is a strong signal that those particular titles are at least worth checking out. An argument could certainly be made that since so much less stuff made it to English speaking audiences back then, it was easier for fandom as a whole to rally and concentrate around a small subset of shows compared to now. But hey, people still care about this stuff more than 25 years later. Why not find out what all the fuss is about?
Austin at Otakon 2017, getting his 'Bobby's Girl' cel signed by creator Masao Maruyama
What was it like to be a part of anime fandom at the time? I did not really try to connect with anime fans until high school. There did not seem to be a whole lot of interest in anime at my school when I tried asking around, and so I eventually started an anime club in hopes of finding other fans. Unfortunately basically any extracurricular activity that was not sports or theater was shafted because there were credit requirements related to these and so even though a bunch of people expressed interest in an anime club at my first administrative meeting, very few people could actually come to showings I held after school. To be honest I did not really have a good sense of direction for what I wanted to do with the club until I was a senior and had experienced my rediscovery of anime. It was also during this time I began nurturing my love of old anime. The goal I set that year was to try and break people's preconceived notions of anime with every showing I did and try and make it a little educational by talking about some of the background details of how the titles came to be. So I would show titles like Royal Space Force, Project A-ko, Angel's Egg, Gunbuster, and the early '90s Black Jack OAVs to name a few. That being said, the anime club was really just one guy I had not met before I started it, and my friends most of whom were not really anime fans. The people that attended did tell me later after I had graduated that I showed them some really interesting stuff that they would never have associated with anime normally, so I guess I did achieve my goal in the end. I think there might have been more anime fans than I was originally led to believe but perhaps none of them were interested in going to an anime club. I say this because at a completely unrelated event I was talking to a friend about the unfortunate passing of Satoshi Kon and why this was a big deal, and someone I barely knew chimed in and said "Oh yeah I heard about that too!" I was shocked that someone else in my high school would even know of the name Satoshi Kon.
Then after that was college. Even though I went to a very nerdy college, I really did not connect much at all with anime fans I met there. It honestly was a really hard time for me as an anime fan to have to come to terms with the fact that I had so little in common with other anime fans in my age group. I am aware that what I am saying would probably anger some of the older fans who may have had to endure bullying for being into anime and would have killed to find any other anime fans. With the exception of one person (Hi Steve!), I basically did not meet any anime fans who really cared much about both old anime and the people who worked on them. Even putting aside old anime, people who went to the anime club in college were not particularly interested in having serious discussions about anime either. Apparently the club used to be open to the public but from what I hear, too many old folks being around turned off students from the showings so it was closed off by a previous club president who had graduated by the time I was attending. While I am sure this was done with good intentions for the students, I was pretty bummed out that had I only attended a few years earlier I would have been able to meet a bunch of older anime fans. The one time during those years I felt a really strong connection with other people about anime was during a summer internship in Tokyo when I was 20 years old; basically all the actual employees in my team were middle aged software engineers. That same summer I was again reminded how out of place I was and still am; I was cel shopping in Nakano Broadway and I realized that the only people that ever walked into the cel shops (I spent hours upon hours just looking at cels) that were younger than me were the kids of couples that were much older than me. It is not easy for me to be reminded frequently about my interests are quite out of place with other fans in my age group. I would love to meet other fans in-person that are into old anime regardless of their age but I do not really know of a way to do so easily. I think most people tend to socialize within their age groups so I am not sure there is an easy way.
Was the Internet a part of fandom at the time? It was, but I did not really use the internet to try and find other fans during middle and high school. These days I follow a bunch of the Anitwitter folks though. I mostly gave up trying to connect with other fans in real life circles. Some of my college friends who watch anime have tried to appeal to me by claiming to me things of the nature "Miyazaki seems like he thinks he's the only one who can save anime" or "I can see how Hunter x Hunter was influenced by Naruto." When I respond "Oh that's interesting I never heard of that" and then ask them for a citation source or how they know any of this eventually they admit that they were bullshitting me which I do not take kindly to at all. Experiences like this deter me from wanting trying to discuss anime seriously with the anime fans I currently know in person. As a result I now sort of just silently follow the tweetings of (to name a few) the Mike Toole, Dawn / Usamimi and 80s_anime folks of the world. My small (maybe dumb) hope is that perhaps writing all of this may help open up some avenues to connect with other anime fans into older anime.
Austin at Otakon 2017, getting his 'Bubblegum Crisis' cel cel signed by Hidenori Matsubara.
Do you remember your first convention? What was it, and what was it like? My first anime convention was actually only a little over a year ago, at Anime Boston 2016. Prior to that my entire knowledge of what actually happens at anime conventions was pretty much based the AWO podcast coverage of them. I only went on Sunday and I mostly just spent time in the dealers' room, especially at the only vendor that was selling cels. Instead of cels, at that booth I ended up buying two Galaxy Express 999 posters, a Royal Space Force poster, and a Macross Do You Remember Love poster. I'm kind of kicking myself for not going for the whole weekend because Masao Maruyama was a guest that year.
Tell me how you got a summer internship in Tokyo. Where was it? Did you speak Japanese? So I actually did three summer internships in a row in Japan. The first in Hyogo Prefecture (near Osaka), the second in Tokyo, and the third in Tokyo. These were all arranged through my school which had a program that you where you could do summer internships abroad. All of these internships were software development related (I majored in Computer Science).
The first internship was for a startup which excluding me and another intern from my school, consisted of literally just my French boss and a Japanese student working there. At lunch sometimes we would use Japanese but for work stuff I would just speak to him in English.
The second internship was for a more traditional Japanese company called Secom, and took place at their research lab in Mitaka city (the same city where the Ghibli museum is located). They asked me what language I preferred to communicate with and I insisted on Japanese because I was trying to get more comfortable speaking it. They seemed relieved and happy to accommodate that request, although we would have once a week English lunch table events which I would go to so they could practice English. Those lunch tables were the only time I spoke English at the company. In the present day my spoken Japanese has atrophied very hard, although I'm still practicing reading and listening. As I mentioned earlier, most of the people in my team were essentially folks in their 40s to 50s who majored in Computer Science back in the day. In other words, the demographic of people who would likely enjoy the same kind of anime that I do. This was exactly the case. I could talk about how great Galaxy Express 999 is and people would respond with pleasant agreement instead of a blank face, wow! Forgive me for tooting my horn a little, but those guys were continually surprised by just how much I knew about older anime properties; actually I feel like I actually don't know that much compared to the super fans that I follow online. For a presentation I did in front of an audience comprised of people from a bunch of different teams, I showcased some of the cels I bought that summer and invited people to stop by my desk if they wanted to take a look at the rest. One guy who came by was talking about Royal Space Force: The Wings of Honneamise and referred to Hideaki Anno as the director. I gave him a weird look and corrected him, pointing out that the director was in fact Hiroyuki Yamaga. He still wasn't quite convinced but my supervisor had my back and said "he actually knows a lot about anime." Most of the people in my team weren't necessarily hardcore anime fans so much as people who enjoyed anime when they were younger. It just so happens those anime titles were exactly what I was into. As a half-joke I would tell friends in the states that I was finally with my kind of people. It was the first (of very few) major experiences I've had offline where I felt like I really had an overlapping anime interest with another group of people.
The third internship was not an internship so much as a summer research experience I did at Tokyo University. I think most students (all of them were graduate students) in the lab could read English decently, which was probably a requirement given that most academia is published in English, but they were no one spoke it at all. It was kind of unfortunate since my Japanese speaking had gotten a lot worse at this point so it was hard to actually engage in conversations about stuff. During my introduction to the lab I did mention (in Japanese) "Hmmm, as far as hobbies I'm into '80s anime in particular." After processing what I had said, one of the students responded "… wait we weren't even born then."
This reminded me of an amusing experience during my first summer in Japan before my first internship started, where I was in a language exchange thing that was happening at Tokyo University with my Japanese class from school. I didn't realize it at the time, but apparently my bizarre interest in older anime left an impression on some people there. At the end of this language exchange thing, there was a closing event where on a whim they were someone should do karaoke. Prior to this I had used the opening to Gatchaman in a presentation for my Japanese class so everyone from my class wanted me to go sing the opening in front of a bunch of Tokyo University engineering staff and graduate students, which I did. I'm not even sure the graduate students knew what this was, and it must have been weird for some of the staff to get a flashback to their childhoods.
Was your interest in anime a contributing factor to you taking an internship in Tokyo? Maybe somewhat but honestly I don't think it was that big of a factor prior to accepting the internship. Completely unrelated to my anime interest, I had read up a lot about lifestyle differences or social issues in Japan. So I was well aware that it isn't some fantasy land where people casually walk down the street rocking Naruto headbands. Especially coming from Hong Kong and then living in the states, the culture shock wasn't that big for me by the time I spent my first summer in Japan.
I also didn't really have this anime fan obsession with Akihabara being the holy land nor did I feel like I absolutely had to make a pilgrimage over there to complete my anime fan journey. I did go a couple of times and at first it was a little overwhelming but honestly overall it was pretty boring for me. If you are down with all the hot anime merchandise and have tons of money, then they will very willingly accommodate that fan interest. But for someone like me whose mind was flooded with obsession over older anime, there wasn't a lot that catered to me from there. Nakano Broadway on the other hand, THAT is where the old school anime fan stuff is at.
In your opinion, what's the biggest contrast between anime fandom today and anime fandom when you first got into it? This is a pretty boring answer because it could apply to anyone besides people that became fans after the rise of streaming as a anime delivery mechanism, but it has to be just the sheer amount of anime that is available via legal means. More accessibility is great but ironically the problem of legal accessibility being solved has lead to the problem of too much anime being available. The latter is not actually a problem because it's as simple as choosing not to watch everything, but I think any long term fans can probably name a person or two that tried to watch everything available every season and burned out really fast. As far as how this relates to fandom specifically, I think an obsession with always trying to stay up to date has lead to overall anime fandom having a very short term memory. To be honest not long after I was getting into anime I think this was already starting to happen, but now it seems even worse. I hope I'm wrong, but I don't really see the modern equivalent of extreme concentrated pockets of fandom for older properties (whether that's stuff from when I was getting into anime, or before). It would be a shame to lose that level of fan dedication. That being said, I'm still pretty optimistic that dedicated fandom will still thrive in some form.
Austin can be reached on Twitter and his blog.
Categories20-29, Interviews, Male, North America
Previous PostPrevious #118: Kevin
Next PostNext #120: Kara
Read by Age
Read by Gender
#128: John
#127: Isaiah
#126: Gwynevere
#125: Lynzee – "My 'Anime Origin Story' Is #MeToo"
#124: Michael
#123: JJ Kelley
#122: Daisy
#121: Christopher
#120: Kara
Read by Location


text:
Міські голови Донецька — перелік голів міської ради міста Донецька, Україна. Назва посади Юзівки / Сталіно / Донецька змінювалося. Вона в різний час називалася: «голова Юзівської Ради», «голова Юзівської міської управи», «міський голова», «голова міської Ради», «голова виконкому міської Ради».

Першого міського голову було обрано у 1917 р. З 1920 по 1925 рік міською Радою керувала президія окружного виконкому. З 1925 по 1937 рік містом керували голови міської Ради. З 1937 року посаду називається голова виконкому міської Ради. Під час окупації Донецька в 1941—1943 роках містом керувала окупаційна міська управа. 1943 року місто було звільнене і з 1945 по 1990 рік містом керували голови виконкому міської Ради.

Посилання
 Офіційний сайт міського голови та міської ради міста Донецька

Списки міських голів України

redpajama_set_name: RedPajamaWikipedia


• Sanskriti Foundation was established and blessed by Acharya Shri Vidyanandji Maharaj, in the presence of Dr. L.M. Singhvi and other eminent people.
• First activity of the Foundation – the creation of the Sanskriti Awards. Shri Morarji Desai, Prime Minister of India, presented the first awards.
• About 5 acres of land were acquired to set up a cultural centre and campus.
• The Museum of Everyday Art was established at Shri O.P. Jain's residence, C6/53 Safdarjang Development Area and was inaugurated by Smt. Pupul Jayakar in the presence of Dr. Mulk Raj Anand and Shri Jagmohan.
• Publication of Everyday Art of India, a catalogue on the collection of the Museum.
• Allotment of land at C-11 Qutab Institutional Area by the Delhi Development Authority (DDA).
• Ground-breaking ceremony of Sanskriti Kendra and planting of a Banyan tree by Kumar Gandharva and other friends of Sanskriti followed by a concert.
• Architecture and landscape planning of Sanskriti Kendra was undertaken and construction of buildings started.
• Completion of Sanskriti Kendra.
• Establishment of the Sanskriti Museum of Indian Terracotta along with a workshop on Terracotta by eminent artists such as Bhupen Khakhar and Gulam Muhammad Sheikh, as well as local craftsmen like Neelamani Devi, Khemraj Kumar, etc.
• Commencement of the first Residency Programme for artists and writers.
• The Museum of Everyday Art shifted to Sanskriti Kendra.
• The Sanskriti Institute of Management (SIM) initiative is launched, together with the publication of a nine-volume report on Management of Cultural Institutions in India.
• Completion of building at C-11, Qutab Institutional Area.
• Endowment challenge grant of Rs. 1.25 crores by the Ford Foundation.
• Celebration of 25 years of Sanskriti Foundation with a seminar on Corporate Cultural Responsibility and the publication of Sanskriti, a Handbook, in celebration of 25 years of the Foundation.
• Sanskriti Fellowships instituted for young and creative minds.
• A Ceramic Centre set up in collaboration with the Delhi Blue Pottery Trust .
• Establishment of the Museum of Indian Textiles.
• Publication of Museum of Indian Textiles, a catalogue of the collection of the Museum.
• Setting up of an Enamel Centre in collaboration with the Enamellist Society.
• Construction of a Multi-Purpose Hall and relocation of the Ceramic Centre.
• Setting up of a Block Printing Unit.


text:
"use babel";
// @flow

import Rx from "rxjs";
import { addConsoleLogsForTask } from "../Actions/AddConsoleLog";
import { addConsoleSource } from "../Actions/AddConsoleSource";
import { addBufferedLogsForTask } from "../Actions/AddBufferedLogs";
import {
  ConsoleLogError,
  ConsoleLogWarning,
  ConsoleLogInformation,
} from "../Types/types";

const consoleEpic = () => (action$: any) => {
  const currentDate = require("moment");
  const molecule = {
    source: "Molecule",
    color: "#592b71",
    version: "0.4.0",
  };

  return Rx.Observable.merge(
    action$
      .ofType("BUFFER_CONSOLE_LOG")
      .bufferTime(3000)
      .filter(t => t && t.length > 0)
      .map(actions => addBufferedLogsForTask(actions.map(a => a.payload))),

    action$.ofType("ADD_PLAN_CONFIGURATION").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogInformation,
        message:
          "The plan " +
          action.payload.name +
          " from the tool " +
          action.payload.tool.name +
          " has been created",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$
      .ofType("ADD_PLAN_CONFIGURATION")
      .filter(action => action.payload.ownSource)
      .map(action => addConsoleSource(action.payload.name, true)),

    action$.ofType("FEATURE_LOAD").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogInformation,
        message: "The option " + action.payload.featureName + " is active",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("REMOVE_PLAN_CONFIGURATION").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogInformation,
        message:
          "The plan " +
          action.payload.name +
          " from the tool " +
          action.payload.tool.name +
          " has been deleted",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("PIN_PLAN_CONFIGURATION").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogInformation,
        message:
          "The plan " +
          action.payload.planConfig.name +
          " from the tool " +
          action.payload.planConfig.tool.name +
          " has been pinned",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("UNPIN_PLAN_CONFIGURATION").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogInformation,
        message:
          "The plan " +
          action.payload.planConfig.name +
          " from the tool " +
          action.payload.planConfig.tool.name +
          " has been unpinned",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("RUN_TASK").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogInformation,
        message:
          "The plan " +
          action.payload.plan.name +
          " from the tool " +
          action.payload.plan.tool.name +
          " is running",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("STOP_TASK").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogInformation,
        message: "The task has stopped for " + action.payload.name,
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("CRASH_TASK").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogError,
        message: "The task " + action.payload.name + " has crashed",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("FAIL_TASK").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogError,
        message: "The task" + action.payload.name + "has stopped",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),

    action$.ofType("KILL_TASK").map(action =>
      addConsoleLogsForTask({
        ...molecule,
        severity: ConsoleLogWarning,
        message:
          "The task " +
          action.payload.plan.name +
          " of tool " +
          action.payload.plan.tool.name +
          " has been killed",
        date: currentDate().format("DD-MM-YYYY kk:mm:ss"),
      }),
    ),
  );
};

export default consoleEpic;

redpajama_set_name: RedPajamaGithub


these free downloadable templates from West Elm - great for holiday gift tags!
My nephew would love the personalized message from Santa. Thank you!
going to check out the iphone app now - thanks for sharing and looking forward to meeting you tomorrow!
Add that jingle bell app to the list of "reasons to keep children away from technology!"
I love the Santa card - I am off to send it to my daughter...this may be her last year "believing"..
Any favourite artists, maybe ones you hadn't heard before?


Concerned to the competitiveness of our customers, Sofradir offers the best IR products and technologies.
Consequently Sofradir devotes an important part of its budget to the R&D. Innovation is part of our culture. Sofradir is proud to be the first to present the pixel pitch of 15 µm and 10 µm or the operating temperature of 150K.
A skilled and motivated team of scientists and engineers work on R&D field and take advantage of the close partnership with first class laboratories. Today Sofradir and its partners reputation is well-known to lead the development of new infrared technologies and products.


Tucson Daily Photo ~: Do you know where this is?
Time again for a "Where is this?" contest! Here are two views of a very interesting piece of Swiss Cheese in Tucson. As frequent visitors know, the first person to identify "Where is this?" will win a "fabulous" TDP t-shirt featuring the expressive Desert Museum ram. Good luck!
Oh heavens another tricky one! What I do know is that the shadows on the wall are cool looking. What time of day did you take this?


text:
Pogost Trifon () is a rural locality (a selo) in Troitskoye Rural Settlement, Ust-Kubinsky District, Vologda Oblast, Russia. The population was 24 as of 2002.

Geography
Pogost Trifon is located 44 km northwest of Ustye (the district's administrative centre) by road. Kurkinskaya is the nearest rural locality.

References

Rural localities in Ust-Kubinsky District


From the 24th July, we are celebrating summer with our Film Festival, held in the Plaza at Regent's Place!
We're inviting you to join us on The Plaza at Regent's Place to enjoy a variety of everyone's favourite films, from the family favourites to the cult classics. So after work, round up your mates, grab a deck chair and enjoy your favourite films in the sun!
A musical about teens in love, in the 50's! California, 1959, greaser Danny Zuko and Australian Sandy Olsson are in love. They spend time at the beach, and when they go back to school, what neither of them knows is that they both now attend Rydell High. Danny's the leader of the T-Birds, a group of black leather jacket-wearing greasers while Sandy hangs with the Pink Ladies, a group of pink-wearing girls led by Rizzo. When they clash at Rydell's first pep rally, Danny isn't the same Danny from the beach. They try to be like each other so they can be together.
PG-13 - sexual content including references, teen smoking and drinking, and language.
Viewing is free but we advise that you get down early to secure a deck chair for yourself.


Our full band composite photo will take place on Monday morning, September 14th.
Call time for the students to be dressed in full uniform will be 7:45a that morning!
If you are interested in ordering a full band composite photo, please print out and complete the form found below. Forms are due by the 14th.
Hard copies are also available in the band room.


text:
Live LOUD
Get LOUD!
Meet ASHLOUD!
Get In Touch(We Luv Emails!)
Buy AshLoud V.1 "Ashtray Speaker" $199
CLASS N SESH: "AshTray History"
Tags: Ashloud, AshloudSpeakers, Ashtray, ashtray history, ashtrayhistory, cannabisdailynews, cigar, cigarhistory, CIGARLOVER, legal weed, preorderspeaker, topashtrays2019, vicelandnews, weedmaps, weednews
History of Ashtrays and Smoking
by Nancy Wanvig
Americans in the 1950's smoked over 542 trillion cigarettes each year.
How did this come about? What is the future of cigarette smoking now?
And how does all this affect ashtrays? Smoking, in some form, was found in Europe at least by the 1500's. In 1603, King James of England declared smoking a filthy habit saying it was harmful "to the brains."
In 1638, China issued a decree threatening decapitation to all tobacco smokers.The Russians in power also deplored the habit. Offenders were to be deported to Siberia. After the Crimean War in 1853, smoking hand-rolled cigarettes became popular among the British and French soldiers who adopted the habit from the Turkish officers. About that time, hand-rolled cigarettes, using Turkish tobacco, were introduced in America.
By the 1900's the tobacco industry had grown, and soon became one of the major growth areas of the twentieth century economy.
In the 1880's it became socially acceptable for men to smoke cigarettes, but it was not until the late 1920's that smoking gained acceptance for women. Also, about this same time the cigarette became the most popular form of smoking tobacco. Early brands of cigarettes came in colorful packages with magnificent designs. As smoking increased, the ashtray made its appearance on the scene. In 1857, according to an English dictionary, the "ash pan" appeared as a new word. This was usually
shaped like a cup, with no rests for cigars or cigarettes. However, in 1887 the same dictionary referred to the ash pan as "ash-tray",and thus the name became known. Soon ashtrays were designed for different uses. There were small individual ones for the dining table, larger ones for the
parlor, fancy ones for the ladies' boudoir, and practical ones for the kitchen. Artistic styles in vogue at the time also influenced the style of ashtrays. The Victorian style, with its ornate decoration, was
very popular in the late nineteenth century. This soon gave way to Art Nouveau, with its flowing lines and graceful decorative themes. Art Deco appeared during the 1920's and 1930's. Angles, bold colors, and new materials, such as chrome and plastics, became popular and played an important role in the Art Deco movement. Later, more conservative metals, such as tin, appeared on the market. During the Great Depression years in the United States when people could not afford to
entertain outside the house, the game of bridge became very popular. Soon special ashtrays were designed for this and other card games. Promoters also used ashtrays with advertising on them as free premiums.
(Photo: Commemorative, decorative ashtray manufactured 1935 (photo 2011)
Doctors, hospitals, schools, and insurance firms all placed ads on them.
Even artists designed them. Soon all kinds of styles and materials were used. And many of these ashtrays were beautiful and expensive.
Other needs also led to new types of ashtrays. New models were designed for smoking while driving a car, and some were for smoking in bed. There were magnetic ashtrays for cars, beanbag ones for
uneven surfaces, ones with candles for bedside, and as money became more plentiful in the 1940's, ones for Christmas and other holidays. People put ashtrays in every room and on almost every table.
(Photo: AshLoud V1.)
Companies specialized in the manufacture of them and unique ashtrays were patented. Now, many companies have passed no-smoking rules at work, and many states have no-smoking laws in public places. There are even laws to protect people from second-hand smoke. Anti-smoking
campaigns and medical support to help people stop have definitely reduced the number of cigarette smokers, and obviously this influences the manufacture of ashtrays. Plain glass ones are still available, and many of the better department stores carry crystal ashtrays, especially at Christmas. But the interesting and lovely ashtrays from the first half of the twentieth century are no longer being made. This part of Americana belongs to the past.
~ Nancy Wanvig
Copyright © 2020 AshLouD

redpajama_set_name: RedPajamaCommonCrawl


Kasey Kahne overcame the ominous threat of rain and the misfortunes of Denny Hamlin to win at Loudon -- Race 18 of 36 en route to NASCAR's series-crowning Ford Championship Weekend at Homestead-Miami Speedway Nov. 16-18. Tickets for Ford Championship Weekend—Nov. 16-18 at Homestead-Miami Speedway—are available now. For ticket information, click [HERE] or call (866) 409-RACE.
In winning for the second time this season, Kahne gave himself a leg up for a wild-card spot in the Chase for the NASCAR Sprint Cup. Kahne led a total of 66 of the 301-lap event. The victory is his first career win at Loudon in 17 starts. His second trip to Victory Lane in 2012 has moved him to 12th in the point standings and places him into the No. 1 Wild Card position. He now has more victories than any other driver outside the top 10.
Hamlin, who led 151 laps, had the field covered until his No. 11 Joe Gibbs Racing team changed four tires on Lap 235 while his competitors only changed two. The move dropped Hamlin to 14th in the running order, and pit-stop decision was blamed on miscommunication between the driver and the team.
Undaunted, Hamlin carved his way through the field and passed Clint Bowyer for second with 14 laps to go. While Hamlin continued to advance, he couldn't close in on leader Kahne, finishing 2.7 seconds behind the No. 5 Hendrick Motorsports car.
"I had a great racecar, but you have days like this and it is just part of racing," said Hamlin. "It is a team sport. It is the driver, the pit crew, the car, the crew chief and all those things put together. We just had a slight miscommunication and that one little mistake magnified to take a win away from us.
Kahne's fellow Hendrick Motorsports teammate Dale Earnhardt Jr. ran solidly in the top-five all day and posted another great finish by coming home fourth in New Hampshire.
In the point standings, the top four are unchanged with Matt Kenseth, Earnhardt, Greg Biffle and Jimmie Johnson leading. With his runner-up finish, Hamlin moved up two notches to fifth. He is trailed by Kevin Harvick, Tony Stewart, Martin Truex Jr., Bowyer and Brad Keselowski.
Carl Edwards is in 11th, 46 behind Keselowski, and Kahne holds down the 12th position, 20 behind Edwards. Kyle Busch resides in13th, two back of Kahne. The Top 12 drivers in points after Race 26 qualify to contend for the 2012 NASCAR Sprint Cup Series Championship, to be crowned in Miami on Nov. 18. Tickets for Ford Championship Weekend—Nov. 16-18 at Homestead-Miami Speedway—are available now. For ticket information, click [HERE] or call (866) 409-RACE.
Fast-qualifier Kyle Busch led the opening 66 laps and had the dominant car with only Hamlin having an equal car. But a faulty pit stop followed by a pit-road speeding penalty dropped Busch to 14th in the standings. While he bounced back quickly, he never regained the top spot, ending up in the 16th spot.
Defending Ford 400 race winner and reigning Sprint Cup Series champion Stewart finished 12th in Race 19 of 36 en route to NASCAR's series-crowning Ford Championship Weekend at Homestead-Miami Speedway Nov. 16-18. Tickets for Ford Championship Weekend—Nov. 16-18 at Homestead-Miami Speedway—are available now. For ticket information, click [HERE] or call (866) 409-RACE.
Next up for the Sprint Cup Series drivers is Indianapolis on Sunday, July 29 (1 p.m. ET, ESPN) — en route to Ford Championship Weekend at Homestead-Miami Speedway (Nov. 16-18). Tickets for Ford Championship Weekend—Nov. 16-18 at Homestead-Miami Speedway—are available now. For ticket information, click [HERE] or call (866) 409-RACE.


text:
Cult's story began in 2009, when it was launched by former national journalists, Charli Morgan and Matt Glass.
They had experienced the often tedious, poorly targeted and lazy process of press release marketing from the other side of the media fence, and decided to use their experience, contacts and creativity to make the PR model they had needed as journalists, finding strong stories and telling them in exciting, engaging and memorable ways to media on tight deadlines.
From creating the world's first Bunny Spa; taking dinosaurs on a rampage across London and shutting down Regent Street for a fleet of supercars, to sailing a pirate ship up the Thames, they have a nose for a story; know who would like to hear it and the best means of communicating it. With the right story, dinosaurs aren't always required and it can be as simple and powerful as a great interview with the right person.
They represent a diverse and exciting roster of clients, which complement and strengthen each other's campaigns, because Cult is dealing with a wide variety of contacts and mutually beneficial opportunities. This also means they approach each client in a more creative and open-minded manner.
The Cult team has been filling their boots with awards for storytelling over the past decade. And since launching, there are even more ways to tell your story, and Cult takes advantage of every tool, whether it's a magazine, event, film, stunt, shoot or social campaign. So for their tenth year, they rebranded from The Cult PR to Cult Media Collective, to contain this exciting umbrella.
Like all good stories, once we've started telling yours, everybody else will continue sharing it for us.
We're all stories.
Let us tell yours.
Registered office: 304 Westmount Road, London SE9 1NL
www.cultmediacollective.com
© 2019 by Cult Media Collective Ltd


In 1967, one in seven Americans lives in poverty. The South Christian Leadership Conference embarks on an ambitious Poor People's Campaign to bring attention to the nation's most needy people. In response to black rioting in 180 cities during the summer of 1967, Martin Luther King says, "the riot is the language of the unheard… America has failed to hear… that the promises of freedom and justice have not been met." Economic inequities are the next target for the movement. Activist Marian Wright suggests to King that the movement stage a poor people's march in Washington, D.C., and SCLC begins planning to bring "a nonviolent army of the poor" to the nation's attention. They are joined by the National Welfare Rights Organization.
Much of this text is excerpted, with permission, from the website for the American Experience series Eyes on the Prize. Read more about these events and others on that site.


Generation Star Wars: MiFi plus iPod touch is game-changing!
Earlier this year I was contacted by 3mobilebuzz to trial the INQ1, which was hailed by critics as the phone for the Facebook generation! The lack of a built-in Twitter client was lamentable, but, for a first generation product, the INQ1 showed great promise within the social media space. Free Skype calls wasn't bad either.
For the purpose of this trial I acted as a mystery shopper and purchased MiFi on PAYG from a 3Store. The in-store point of sale display was informative and helpful staff were on hand.
MiFi was clearly explained and its benefits over a USB modem dongle - no software set-up required out of the box: simply and securely connect a Wi-Fi enabled device such as an iPod touch, Nintendo DSi or Sony PSP. Instant gratification.
MiFi could replace home broadband. At time of writing, I live in an area where 3 mobile coverage is weak and this was pointed out by the sales assistant who asked me whether or not I wanted to proceed with the transaction. 3Store offers excellent customer service and compares favourably with Apple Store.
As a regular commuter between the South West and East of England. The compelling combo of MiFi and an iPod touch could be game-changing, and maybe all the mobile kit I'll ever need! Certainly this would've enabled me to 'tweet', from a mobile device, during a recent visit to Channel Four.
I've begun field testing the MiFi and iPod touch combo and am impressed with the reliability of the connection (where available). However, it maybe prudent to invest in a carry case for MiFi! The pack-in doesn't include one and the device is liable to become scratched and isn't that robust. It's worth observing that the function buttons are cumbersome - it's easy to accidentally disable Wi-Fi - and a single standby button would suffice.
From today you'll be able to buy a MiFi + iPod touch bundle from any 3Store or online here. Pricing for the bundle is £23 a month for a 2-year contract.
I'll be tweeting my MiFi usage during Christmas and the New Year. Looking forward to using MiFi at festive Tweet-Ups and seeing how it copes with more than one device connected.
I'm not so sure it can replace home broadband - it won't recharge whilst you're using it! Not only that, the battery will still run down (albeit more slowly) and the thing will eventually switch itself off!
Just try connecting it via USB and leave it on overnight! In the morning (if it's still alive at all) unplug it and watch the battery indicator flash red!


Select the items you would like to order then go to the shopping cart at the bottom of the page to pay securely using PayPal.
Junior section training will take place on Fridays from 7-8pm starting with our first coached swim session to be held in Spin Newbridge.
The juniors will need kickbords / floats and fins if you have them.
On all the other Fridays, training for juniors will take place in the Gaelscoil, Pipershill from 7pm – 8pm, (every 4th week will be a rest week).


text:
Venezuela, Maduro burns the trucks with aid and breaks with Colombia
Everything is ready for the challenge to the regime of Nicolás Maduro, with the attempt to get into Venezuela trucks and ships with humanitarian aid that the government of Caracas continues to refuse. Venezuelan opposition leader Juan Guaidó has announced that he will ask the international community to keep all options open in the fight to oust the Venezuelan president. But the dictator of Caracas is not willing to give in: the first truck of humanitarian aid that had managed to pass today from Colombia to the Venezuelan side of the bridge Francisco de Paula Santander, was set on fire by the security forces of Maduro. After a day of fighting at the border, according to Colombian sources, the wounded are 285. The Colombian foreign minister denounces the use of tear gas and unconventional weapons by the Venezuelan military. This is known by demonstrators present on the spot, who have posted photos and videos on Twitter. Almost simultaneously, Venezuela announced that it had interrupted diplomatic relations with the neighboring state of Colombia. We continue to receive support from the international community, which has been able to see with its own eyes how the usurper regime violates the Geneva protocol, where it is clearly stated that destroying humanitarian aid is a crime against humanity, he has always written on Twitter Juan Guaidó, the interim president in charge of the country who will meet US Vice-President Pence in Bogota on Monday.


text:
The Sufferings of Jesus Christ
Luke 24:45-46 Then opened he their understanding, that they might understand the scriptures, And said unto them, Thus it is written, and thus it behoved Christ to suffer, and to rise from the dead the third day:
After Jesus Christ was raised from the dead he appeared to two men on the road to Emmaus and "expounded unto them in all the scriptures the things concerning himself." The Scripture in Isaiah foretold of the suffering that Jesus Christ was to endure:
Isaiah 52:14 As many were astonied at thee; his visage was so marred more than any man, and his form more than the sons of men:
"his form, disfigured, lost all the likeness of a man, his beauty changed beyond human semblance" - The New English Bible
He was to be beaten so badly that he would no longer look like a man! Jesus Christ knew God's Word. He knew that this was going to happen to him if he was to fulfill the Scripture. No wonder he prayed three times to the Father prior to his arrest - asking if there were another way to go. Yet he obeyed God's Word and carried out God's Will rather than his own.
Isaiah 53:3-10 He is despised and rejected of men; a man of sorrows [pain], and acquainted with grief [sickness]: and we hid as it were our faces from him; he was despised, and we esteemed him not.
Surely he hath borne our griefs [sickness], and carried our sorrows [pain]: yet we did esteem him stricken, smitten of God, and afflicted.
But he was wounded for our transgressions, he was bruised for our iniquities: the chastisement of our peace was upon him; and with his stripes we are healed.
Sins Covered:
Transgressions - external sins
Iniquities - internal sins
Chastisement of our peace - mental sins
Healed - physical sins
All we like sheep have gone astray; we have turned every one to his own way; and the LORD hath laid on him the iniquity of us all.
He was oppressed, and he was afflicted, yet he opened not his mouth: he is brought as a lamb to the slaughter, and as a sheep before her shearers is dumb, so he openeth not his mouth.
He was taken from prison and from judgment: and who shall declare his generation? for he was cut off out of the land of the living [he was going to have to die]: for the transgression of my people was he stricken.
And he made his grave with the wicked, and with the rich in his death; because he had done no violence, neither was any deceit in his mouth.
Yet it pleased the LORD to bruise [to crush with disease] him; he hath put him to grief [sickness]: when thou shalt make his soul an offering for sin, he shall see his seed, he shall prolong his days, and the pleasure of the LORD shall prosper in his hand.
Jesus Christ knew the Word of God and he had been telling his disciples what was going to happen for many days prior to his arrest:
Matthew 16:21 From that time forth began Jesus to shew unto his disciples, how that he must go unto Jerusalem, and suffer many things of the elders and chief priests and scribes, and be killed, and be raised again the third day.
Mark 8:31 And he began to teach them, that the Son of man must suffer many things, and be rejected of the elders, and of the chief priests, and scribes, and be killed, and after three days rise again.
Luke 9:22 Saying, The Son of man must suffer many things, and be rejected of the elders and chief priests and scribes, and be slain, and be raised the third day.
Luke 17:25 But first must he suffer many things, and be rejected of this generation.
The record of over 40 hours of suffering:
He was arrested in the garden of Gethsemane on the Mount of Olives late Monday night: (Matthew 26:47-56, Mark 14:43-52, Luke 22:47-53, John 18:2-12)
He appeared before the high priest Annas late Monday night. During this "trial" one of the Temple guard "struck Jesus with the palm of his hand." This phrase is translated from the one Greek word, rhapisma, which means to beat repeatedly with a whip like cane.: (John 18:13-23)
He appeared before the high priest Caiaphas and the Sanhedrin (the ruling 70) in a "night trial" late Monday night - very early Tuesday morning. During this "trial" they spit in his face and buffeted him [to beat repeatedly with fists] and again "smote him with the palms of their hands" - to beat with a cane or rod. They blindfolded him and beat him on the face asking him to prophesy who smote him: (Matthew 26:57-75, Mark 14:53-72, Luke 22:54-65, John 18:24-27)
He appeared a second time before the ruling 70 (Sanhedrin council) around daybreak for a "morning trial" on Tuesday: (Matthew 27:1, Mark 15:1, Luke 22:66-71)
He appeared before the Roman governor of Judea, Pontius Pilate, early Tuesday morning after daybreak: (Matthew 27:2, Mark 15:1, Luke 23:1-6, John 18:28-38)
He appeared before the Roman ruler of Galilee, Herod Antipas, Tuesday morning. Herod took off his clothing and dressed him in a bright ornate robe to mock his claim of kingship.: (Luke 23:7-12)
He appeared again before Pontius Pilate later on Tuesday morning. During this trial, Pilate tried to release him by appealing to the Judeans present three times. Pilate had him beaten with rods [scourged- with a whip that had pieces of metal or bone in the end] and he had the soldiers place a crown of thorns on his head and again smote him with rods. They put a second purple "royal looking" robe on him and mocked him:(Matthew 27:11-25, Mark 15:2-14, Luke 23:13-23, John 18:39-19:15)
He was finally sentenced by Pontius Pilate around noon (John 19:14) on Tuesday (Matthew 27:26, Mark 15:15, Luke 23:24-25, John 19:16)
Finally, he was tortured and mocked by a whole band ["cohort"=four to six hundred] Roman soldiers from around noon on Tuesday until he was led to be crucified early Wednesday morning. This torture included repeated beatings with a stick, braiding a second crown of thorns which they placed on his head and then beat into his head with a reed, ripping off his blood soaked clothing and replacing it for the third and then a fourth time with a Roman military cloak and then finally with his own original clothing, and mocking his claim of kingship: (Matthew 27:26-31, Mark 15:15-20)
Certainly, by this time he no longer resembled a human being - his visage more marred than any man.
He was led to be crucified on Wednesday morning: ( Matthew 27:32-34, Mark 15:20-23, Luke 23:26-32, John 19:16-17)
He hung crucified on the tree from approximately 9 a.m. Wednesday morning until 3 p.m. Wednesday afternoon (Matthew 27:35-49, Mark 15:24-36, Luke 23:33-46, John 19:18-30)
He died about 3 p.m. Wednesday: Matthew 27:50-54, Mark 15:37-39, Luke 23:45-48, John 19:30-37)
From his arrest until his death was a period of approximately forty hours. During this time he was utterly humiliated, illegally "tried," savagely tortured, and relentlessly mocked. - quoted from Jesus Christ Our Passover - by Victor Paul Wierwille
The Scripture fulfilled
Acts 3:18 But those things, which God before had shewed by the mouth of all his prophets, that Christ should suffer, he hath so fulfilled.
1 Peter 2:23-24 Who, when he was reviled, reviled not again; when he suffered, he threatened not; but committed himself to him that judgeth righteously:
Who his own self bare our sins in his own body on the tree, that we, being dead to sins, should live unto righteousness: by whose stripes ye were healed.
1 Peter 3:18 For Christ also hath once suffered for sins, the just for the unjust, that he might bring us to God, being put to death in the flesh, but quickened by the Spirit:
The sufferings of Jesus Christ for us are now a past tense reality. He has fulfilled all that the Scripture foretold!
As cold waters to a thirsty soul, so is good news from a far country. Proverbs 25:25
Cortright Fellowship
URL http://www.cortright.org/suffer.htm
© Copyright March 1997 Michael Cortright


"I really wish I had a dedicated Linux computer to run computer vision algorithms on," said my fiancée a couple of weeks ago. If you were there you would have been blinded by the metaphorical light bulb that lit over my head. You see, just the week before, my friend and co-worker had ordered an old, decommissioned (complete with "non-classified" stickers!) Apple Xserve off of eBay for merely $40. Like my fiancée, he wanted to have a machine for a special purpose: test compilations of open source software on a big-endian architecture. I was quite envious that he was able to hack on such cool hardware for such a cheap price. But, I wasn't yet ready to bring out my wallet. I couldn't justify indulging a new hobby without good reason—I was stuck waiting for just the right impetus. I didn't wait long. My fiancée's wish became my command!
Too long? Skip to the good stuff.
I immediately related the story of my co-worker to her: a server for just $40! Granted, we would want a little-endian, x86-64 architecture. Plus, for her algorithms and my virtual machine research we'd probably want a lot of cores and as much RAM as possible. Oh yeah, did I mention I also wanted a beefier machine at home so I could manipulate large virtual machine images? Virtual machines (VMs)! We'd need CPUs with VT-x or AMD-V so we could run VMs with accelerated hardware support. VMs run slow as a snail without acceleration. That would make the machine useless to me.
Focused on my quest, I started scanning eBay listings daily. My co-workers even began to notice and started asking me if I was looking for something specific. I responded that I was toying with the idea of trying to grab some cheap data-center-class hardware (for the astute, cheap data-center-class hardware should be an oxymoron). I was worried my project would end in failure, and wasn't quite ready to announce to the whole world my larger plans. After several days of failed bid attempts—I always seemed to get sniped in the last few seconds—I finally found what appeared to be the perfect fit.
There is a lot of conjecture on where the Dell 1U rackmount model CS24-SC came from. Some people say Facebook data centers. Others just say that it was mass-produced for "clouds." Whatever these servers were used for, they were all retired by the thousands and show up all over eBay. The general consensus is that Dell never sold these to general customers; the CS24-SC was a special custom-designed server sold by the tens of thousands to certain large customers. Thus, the CS24-SC has no support from Dell. I haven't been able to find anything outside of what random other CS24-SC owners have found in the years since the great decommission event.
The CS24-SC has a few variations, but they don't deviate too significantly. The one I had in my sights came with two quad-core Xeon E5410 @ 2.33 GHz CPUs. OK, fairly beefy compute from a few years ago giving us eight total real cores. It had 8 GB of RAM installed, which felt a little wimpy. Articles from second-hand owners online were conflicted on the maximum amount of RAM supported by the CS24-SC. Some said 48 GB, others said 24 GB was the max. Well, it didn't matter, because the greatest amount of RAM I could find at a reasonable price was 24 GB of data-center-class ECC RAM (PC2-5300P for the interested). Cool, what are we still missing? Oh, most of these second-hand machines don't come with hard drives or hard drive caddies.
A quick visit to Newegg and I identified a cheap Seagate 1 TB hard drive (ST1000DM003) to slot in. Meh, lets do this right and add in an extra hard drive for RAID1 to protect our work. I also threw in two CAT6 Ethernet cables so we could use both of CS24-SCs gigabit network ports, and a power cable. Well, that's about it right? The server on eBay had its own case, 400 watt stock power supply, motherboard, and other needed components.
Figure 1. NewEgg shipped these within a day!
We had to wait 1.5 weeks, but finally the CS24-SC arrived. I anxiously picked it up at our local FedEx location just up the street. My fiancée and I unboxed it together and hooked up all the components together. She tried putting in some of the RAM herself, so this counts as a date right? We were both worried that it wouldn't boot, and in a sense that became a self-fulfilled fear. After plugging in a VGA monitor, we just had a black, blank screen. Uh oh, maybe the hardware is bad? Or maybe the RAM is bad?
Figure 2. Dell CS24-SC sticker, it's an authentic!
Figure 4. The HDDs connect fine without caddies.
Figure 5. Cabling in the back.
I really racked my brain thinking of ways to check on this system. I plugged in the Baseboard Management Console (BMC) port into my router. Based on its DHCP client table, I guessed a certain device on my network was coming from the BMC port. My hunch was confirmed when I port-scanned and discovered port 81 open and running an Apache server. After going to the server in my browser I was presented with a login prompt. I was getting desperate and worried. I thought that even if the VGA port was bad for some reason, we'd at least be able to get into the remote console. But how to get past this login screen?
I tried several username/password combinations, and luckily root/root worked. I found out later online that is the default username/password combination. Thank you to whomever left this at the default, or reset it! If you sell a server with such a management console, please reset it if you customized it at all. It turned out that the VGA port wasn't bad, we just didn't have the monitor plugged in before the BIOS flashed its screen. The system went to a blank screen after failing to boot an OS.
Figure 6. See, it really does work.
Figure 7. Always check for bad hardware.
Okay, phew, things seem to be working. I downloaded Ubuntu 14.04 LTS Server and copied it onto a USB stick. Our CS24-SC had no trouble booting into the Ubuntu installer off of USB. We installed Ubuntu, named our server "phoenix," after the ever-reincarnating mythical bird, and started customizing our CS24-SC. The two hard drives, 24 GB RAM, and whole system were recognized perfectly by the BIOS and Ubuntu. The only lingering issue I have is that Ubuntu doesn't seem to properly display through the VGA interface after it boots. Grub displays fine, and so do the early-stage kernel messages. Perhaps this is just a driver issue I need to track down. Also, the fans on the PSU don't spin, but it doesn't appear to be going bad yet.
Hardware virtualization seems to work, and we are setting up our own work environments within Vagrant-managed VMs. I'm using this opportunity to experiment with some advanced Linux functionality I've never tried before. Our two hard drives are not a traditional RAID1. I'm using the new btrfs file system to mirror our root partitions. There would be some work involved in setting up the second hard drive to boot, but we won't lose our data. I setup the dual gigabit ports into a single bonded virtual device using the Linux kernel's balance-alb algorithm to try and balance inbound and outbound TCP flows across both ports.
There you have it, a[n] [old] data-center-worthy home cloud server for only $310.28. Just for fun I tried customizing a hypothetical order on Dell's website for new hardware configured the same way our CS24-CS is: it came out to over $3,300—with discounts it only drops to $2,400. Simply adding a second CPU on the Dell website costs over $500, more than our entire setup! The more modern hardware is faster, but our little CS24-CS is almost 90% cheaper. Thanks for reading my story of how I built a $300 home cloud server. And now maybe you can too with a little elbow grease and eBay.
This entry was posted in Distributed Systems and tagged distributed systems, hardware, hardware hacking by Wolfgang Richter. Bookmark the permalink.
That is terrific but does require technical information and hard work to complete the project successfully. Congratulations!
Just like fixing up an old car or motorcycle, yes it requires expertise.
Insightful article. Are you planning on outlining the set-up process for the software side?
Yes actually I was, definitely needs to be a separate article.
Especially the Vagrant stuff and how I'm using it to manage a "microcloud" at my home.
I agree. There's nothing "cloud" about this. What are you going to add to turn it into a cloud server? When I think of home cloud server I think of running programs and storing data on a box I control, but can access when I'm out in the world. Old hardware I've got; I'd like to know more about the software side of the equation.
I do a lot of cloud computing research. This post is just showing the hardware I got to support my work at home.
I manipulate VMs and often run with a customized, modified hypervisor and cloud computing stack (OpenStack in my case).
I didn't talk deeply about my research in this post, but I did state that I'm currently managing VMs via Vagrant for both her and me.
I will also be running benchmarks with my experimental cloud software I use in my research.
Also, in all the talk about "cloud" we often forget there actually is a _hardware_ side to the story.
This article was focused mostly on that side of the story.
Uh… exactly what is "cloud" about this? Why are you using the term "cloud"? It's a computer in your home, running Ubuntu. "Cloud Server".
It runs a modified hypervisor and cloud software that I use in my research.
Great article! How loud is your server?
It sounds like a hair drier on a low setting. It's not that bad unless under a high load and spinning the fans at maximum. I'd call it bearable.
very interesting but why did u choose to buy a server and not using Amazon EC2? Pro and cons?
Because I use modified hypervisor in my cloud research.
I can not use VMs, I am the one that manages them.
Not so bad, it's a 400W server and we don't use it 24/7. Also, it draws less power when not under load.
Have you connected something like a kill-a-watt to see what the power draw is? I think you'll find that it's pulling an absurd amount of power. As a general rule of thumb, each watt is $1 to run 24/7. That means if it's pulling 300watts as I suspect, you're paying an extra $200/year more than more energy efficient hardware. It may still be worth it, but I wanted to point out the hidden cost. Sometimes it's worth replacing old hardware just for the power savings from a financial aspect.
Totally true. But for our use case, research workloads, we only turn it on sporadically (2-4 times per week).
Doesn't sound like a very good idea.
The cpu itself is not very powerful but now you have a 19″ server lying around with small noisy fans.
Instead you could have bought just consumer hardware (like 20bugs normal pc case etc.). Which might have been a little bit more expensive but more quiet, much faster (and therefore better suited for computer vision algos) and easier to handle. (Spare parts or replacement parts are cheap etc.) and you don't need special hardware which fits in your 19″ server case. Put in a graphics card for your vision algo -> no brainer.
This sever also looks like it uses a lot of power all the time.
Actually, graphics cards are not always by default more useful for computer vision.
So, what is your annual energy bill going to be for this data centre class hardware?
I'll let you know in awhile.
I do need to measure its power draw!
Try 'nomodeset' and/or remove 'quiet' from your grub cmd line. That should 'fix' your VGA boot issue.
You are the most helpful person on both this blog and Hacker News.
Thanks for reading the article, understanding things, and actually being helpful.
I did exactly this about 2 years ago. Same machine, also Ubuntu. I used 2 * 1TB drives and a small ssd though, with 32gb mem. Mine wouldn't boot properly at first until I did a bios update.
It's like 4 hair dryers constantly running, and it heats the spare room to furnace temperatures. Nice in the winter though. Anyway, I had a lot of fun, compiling wicked fast, running Plex server wicked fast, set up owncloud.
After about 9 months I had to decommission it since my fiancé (wife now) hadn't slept for 9 months due to the noise. It say dormant for another 9 months, then eventually got dumped outside near the trash a couple months ago when we moved. Since then I've been using AWS, a couple of Intel NUCs, and if I feel the need I'll get a HP Z620 like the one under my desk at work, better spec than the CS, far lower power use, and silent.
Nevertheless, good luck, sleep well, and try not to have a heart attack when you get the electricity bill.
Haha, yes I understand the noise issue (we both do).
We aren't running 24/7, so it really isn't an issue.
Yeah, I had buy in, but neither of us quite realised how loud it was gonna be. Seriously though, have a look at the used HP Z600s going on eBay if you want a silent alternative at any point.
Gotcha, we are perfectly fine with the noise value on ours.
It saddens me that you simply threw this away–at least give it away to someone that wants it! The first process in recycling is re-use. And since I'm using one of these almost 4 years later (that I just acquired), I'm sure someone could have used it vs it becoming landfill material.
came to respond to the grub thing – if 'Treffer's approach doesn't work – check to see if grub is outputting to serial console instead of vga?
Thanks also 🙂 I'll try and remember to let you guys know what works.
How is this a cloud? Short answer, it isn't.
There are two senses in which I meant cloud server.
(1) This hardware was previously used in a "cloud" somewhere, so it's having a "cloud server" in the literal sense at home.
(2) I do cloud computing research.
I didn't talk deeply about my research, but I generally operate with a modified hypervisor (QEMU) and run tests with virtual machines.
So it will definitely be used to deploy experimental, research cloud software.
I operate often with OpenStack. I am undecided as to whether or not I will run OpenStack on it right now.
As I said in the article, I am running VMs managed by Vagrant right now (so, very cloud-like running multiple VMs for different tenants, both me and her).
You will want to rethink your decision to go btrfs on your new disks.
Btrfs, when it decides to puke, pukes so badly that unless you have alternate backups, all your data is simply gone. Even in it's mythical "raid1" setup, when it corrupts the disk, the "second copy" is also gone. (been there, seen that happen, twice actually).
There's a reason why it is still marked "experimental". It is, and if you value you data, you'll rethink using it.
What version of btrfs were you using?
I have heard these reports, and waited until now to use it for this very reason.
I see on Wikipedia it is marked as stable since July 29, 2013 (well over a year now of stable development supposedly)—since Linux Kernel 3.10.
I'm a little less trusting of the state of BTRFS. I use ZFS instead for these features. Performance of ZoL is decent these days and with 0.6.3 they've fixed the annoying deadlock-when-system-swapping bugs. Even when those bugs were present it always flushed pending writes.
Right, I felt both lagged in terms of the quality I wanted to see.
But I always thought, at least in the Kernel, btrfs would someday win.
We are backing it up with the knowledge that btrfs might screw up.
Did you look into other more quiet and less energy consuming options?
I think my wife would kill me if I tried something like this in our small apartment.
So our main guiding function was (1) maximize memory+cores, (2) minimize cost. This basically threw out your "small plug in the wall" super quiet, super low energy devices. It even threw out laptops as their compute/memory density was not high enough for us.
I mean, she already has a high-end Macbook Pro, and still wanted a dedicated high-memory system for some CV processing.
So we turned to these servers.
Great to hear another great use of the CS24. I was just given one of this for free and while dated, it's still very usable. The price performance ratio is ridiculously great as I've seen these for as cheap as $40 as of late.
Besides the drives and memory, did you ever add anything else to the hardware? It looks like there's a space for a DVD/CD-ROM (my searching brought me here), but it doesn't seem like anyone's done it so far that I've found.


text:
Health Inequity: Air Quality and Environmental
Source: WHO World Health Organization
Air Quality Website Resouces
•Air Now
The AQI is an index for reporting daily air quality.The AQI focuses on health effects you may experience within a few hours or days after breathing polluted air. EPA calculates the AQI for five major air pollutants regulated by the Clean Air Act: ground-level ozone, particle pollution (also known as particulate matter), carbon monoxide, sulfur dioxide, and nitrogen dioxide. For each of these pollutants, EPA has established national air quality standards to protect public health .Ground-level ozone and airborne particles are the two pollutants that pose the greatest threat to human health in this country.
https://airnow.gov/index.cfm?action=airnow.local_city&cityid=273
•Eastern Kern Air Pollution Control District
http://www.kernair.org/
•San Joaquin Valley Air Pollution Control District
http://www.valleyair.org/Home.htm
•California Air Resources Board
A State of California agency that takes action to battle climate change beyond 2020 while improving air quality.
https://ww2.arb.ca.gov/homepage
•State of California - Office of Environmental Health Hazard Assessment (OEHHA). The mission of the Office of Environmental Health Hazard Assessment (OEHHA) is to protect and enhance public health and the environment by scientific evaluation of risks posed by hazardous substances.
https://oehha.ca.gov/
See OEHHA's CalEnviroScreen 3.0 Tool at http://oehha.maps.arcgis.com/apps/MapSeries/index.html?appid=8dad35dcd2274285874e60871c404edc
National and Global
•United States Environmental Protection Agency (EPA)
Definitions, Standards, and Resources for Criteria Air Pollutants: Ground-level Ozone, Particulate Matter, Carbon Monoxide, Lead, Sulfur Dioxide, and Nitrogen Dioxide. http://www.epa.gov/criteria-air-pollutants
•WHO and Air Quality
Includes definitions, facts, data, reports, maps, and links to publications and articles. http://www.who.int/airpollution/en/
The built environment includes all of the physical parts of where we live and work (e.g., homes, buildings, streets, open spaces, and infrastructure). The built environment influences a person's level of physical activity. For example, inaccessible or nonexistent sidewalks and bicycle or walking paths contribute to sedentary habits. These habits lead to poor health outcomes such as obesity, cardiovascular disease, diabetes, and some types of cancer. (CDC Excerpt) https://www.cdc.gov/nceh/publications/factsheets/impactofthebuiltenvironmentonhealth.pdf
The Built Environment Website Resources
•American Lung Association in California - Public Health Crossroads: Sustainable Growth for Healthier Kern Neigborhoods
http://www.lung.org/local-content/california/documents/kern-public-health-crossroads.pdf
•Bike Bakersfield - Community Organization
http://bikebakersfield.org/
•Walk Audit Report (Blog)
https://cal.streetsblog.org/2016/12/14/kern-county-conducts-walk-audits-to-identify-needed-pedestrian-improvements/
Valley Fever Articles
•Pierce, Harold. "Assemblymen ask state for $7 million in fight against valley fever to fuel research, spread awareness. Bakersfield Californian eEdition. 13 March, 2018. http://www.bakersfield.com/news/health/assemblymen-ask-state-for-million-in-fight-against-valley-fever/article_df02e968-26e8-11e8-8a1e-c3f4db8952a5.html
and "Cocci Truism: You're your own best valley fever expert". California Valley Fever Network at University of California, Merced.
http://valleyfever.ucmerced.edu/news/2016/cocci-youre-your-own-best-valley-fever-expert
<< Previous: Access to Health Care
Next: Food Insecurity and Safety >>


text:
/*************************************************************************/
/*  polygon_path_finder.cpp                                              */
/*************************************************************************/
/*                       This file is part of:                           */
/*                           GODOT ENGINE                                */
/*                    http://www.godotengine.org                         */
/*************************************************************************/
/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */
/*                                                                       */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the       */
/* "Software"), to deal in the Software without restriction, including   */
/* without limitation the rights to use, copy, modify, merge, publish,   */
/* distribute, sublicense, and/or sell copies of the Software, and to    */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions:                                             */
/*                                                                       */
/* The above copyright notice and this permission notice shall be        */
/* included in all copies or substantial portions of the Software.       */
/*                                                                       */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
/*************************************************************************/
#include "polygon_path_finder.h"
#include "geometry.h"

bool PolygonPathFinder::_is_point_inside(const Vector2& p_point) const {

	int crosses=0;

	for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {

		const Edge& e=E->get();

		Vector2 a = points[e.points[0]].pos;
		Vector2 b = points[e.points[1]].pos;

		if (Geometry::segment_intersects_segment_2d(a,b,p_point,outside_point,NULL)) {
			crosses++;
		}
	}

	return crosses&1;
}

void PolygonPathFinder::setup(const Vector<Vector2>& p_points, const Vector<int>& p_connections) {

	ERR_FAIL_COND(p_connections.size()&1);

	points.clear();
	edges.clear();

	//insert points

	int point_count=p_points.size();
	points.resize(point_count+2);
	bounds=Rect2();

	for(int i=0;i<p_points.size();i++) {

		points[i].pos=p_points[i];
		points[i].penalty=0;

		outside_point.x = i==0?p_points[0].x:(MAX( p_points[i].x, outside_point.x ));
		outside_point.y = i==0?p_points[0].y:(MAX( p_points[i].y, outside_point.y ));

		if (i==0) {
			bounds.pos=points[i].pos;
		} else {
			bounds.expand_to(points[i].pos);
		}
	}

	outside_point.x+=20.451+Math::randf()*10.2039;
	outside_point.y+=21.193+Math::randf()*12.5412;

	//insert edges (which are also connetions)

	for(int i=0;i<p_connections.size();i+=2) {

		Edge e(p_connections[i],p_connections[i+1]);
		ERR_FAIL_INDEX(e.points[0],point_count);
		ERR_FAIL_INDEX(e.points[1],point_count);
		points[p_connections[i]].connections.insert(p_connections[i+1]);
		points[p_connections[i+1]].connections.insert(p_connections[i]);
		edges.insert(e);
	}

	//fill the remaining connections based on visibility

	for(int i=0;i<point_count;i++) {

		for(int j=i+1;j<point_count;j++) {

			if (edges.has(Edge(i,j)))
				continue; //if in edge ignore

			Vector2 from=points[i].pos;
			Vector2 to=points[j].pos;

			if (!_is_point_inside(from*0.5+to*0.5)) //connection between points in inside space
				continue;

			bool valid=true;

			for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {

				const Edge& e=E->get();
				if (e.points[0]==i || e.points[1]==i || e.points[0]==j || e.points[1]==j )
					continue;

				Vector2 a = points[e.points[0]].pos;
				Vector2 b = points[e.points[1]].pos;

				if (Geometry::segment_intersects_segment_2d(a,b,from,to,NULL)) {
					valid=false;
					break;
				}

			}

			if (valid) {
				points[i].connections.insert(j);
				points[j].connections.insert(i);
			}
		}
	}
}

Vector<Vector2> PolygonPathFinder::find_path(const Vector2& p_from, const Vector2& p_to) {

	Vector<Vector2> path;

	Vector2 from=p_from;
	Vector2 to=p_to;
	Edge ignore_from_edge(-1,-1);
	Edge ignore_to_edge(-1,-1);

	if (!_is_point_inside(from)) {

		float closest_dist=1e20;
		Vector2 closest_point;

		for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {

			const Edge& e=E->get();
			Vector2 seg[2]={
				points[e.points[0]].pos,
				points[e.points[1]].pos
			};

			Vector2 closest = Geometry::get_closest_point_to_segment_2d(from,seg);
			float d = from.distance_squared_to(closest);

			if (d<closest_dist) {
				ignore_from_edge=E->get();
				closest_dist=d;
				closest_point=closest;
			}
		}

		from=closest_point;
	};

	if (!_is_point_inside(to)) {
		float closest_dist=1e20;
		Vector2 closest_point;

		for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {

			const Edge& e=E->get();
			Vector2 seg[2]={
				points[e.points[0]].pos,
				points[e.points[1]].pos
			};

			Vector2 closest = Geometry::get_closest_point_to_segment_2d(to,seg);
			float d = to.distance_squared_to(closest);

			if (d<closest_dist) {
				ignore_to_edge=E->get();
				closest_dist=d;
				closest_point=closest;
			}
		}

		to=closest_point;
	};

	//test direct connection
	{

		bool can_see_eachother=true;

		for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {

			const Edge& e=E->get();
			if (e.points[0]==ignore_from_edge.points[0] && e.points[1]==ignore_from_edge.points[1])
				continue;
			if (e.points[0]==ignore_to_edge.points[0] && e.points[1]==ignore_to_edge.points[1])
				continue;

			Vector2 a = points[e.points[0]].pos;
			Vector2 b = points[e.points[1]].pos;

			if (Geometry::segment_intersects_segment_2d(a,b,from,to,NULL)) {
				can_see_eachother=false;
				break;
			}

		}

		if (can_see_eachother) {

			path.push_back(from);
			path.push_back(to);
			return path;
		}
	}

	//add to graph

	int aidx = points.size()-2;
	int bidx = points.size()-1;
	points[aidx].pos=from;
	points[bidx].pos=to;
	points[aidx].distance=0;
	points[bidx].distance=0;
	points[aidx].prev=-1;
	points[bidx].prev=-1;
	points[aidx].penalty=0;
	points[bidx].penalty=0;

	for(int i=0;i<points.size()-2;i++) {

		bool valid_a=true;
		bool valid_b=true;
		points[i].prev=-1;
		points[i].distance=0;

		if (!_is_point_inside(from*0.5+points[i].pos*0.5)) {
			valid_a=false;

		}

		if (!_is_point_inside(to*0.5+points[i].pos*0.5)) {
			valid_b=false;

		}

		for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {

			const Edge& e=E->get();

			if (e.points[0]==i || e.points[1]==i)
				continue;

			Vector2 a = points[e.points[0]].pos;
			Vector2 b = points[e.points[1]].pos;

			if (valid_a) {

				if (e.points[0]!=ignore_from_edge.points[1] &&
				    e.points[1]!=ignore_from_edge.points[1] &&
				    e.points[0]!=ignore_from_edge.points[0] &&
				    e.points[1]!=ignore_from_edge.points[0]) {

					if (Geometry::segment_intersects_segment_2d(a,b,from,points[i].pos,NULL)) {
						valid_a=false;
					}
				}
			}

			if (valid_b) {

				if (e.points[0]!=ignore_to_edge.points[1] &&
				    e.points[1]!=ignore_to_edge.points[1] &&
				    e.points[0]!=ignore_to_edge.points[0] &&
				    e.points[1]!=ignore_to_edge.points[0]) {

					if (Geometry::segment_intersects_segment_2d(a,b,to,points[i].pos,NULL)) {
						valid_b=false;
					}
				}
			}

			if (!valid_a && !valid_b)
				break;

		}

		if (valid_a) {
			points[i].connections.insert(aidx);
			points[aidx].connections.insert(i);
		}

		if (valid_b) {
			points[i].connections.insert(bidx);
			points[bidx].connections.insert(i);
		}

	}
	//solve graph

	Set<int> open_list;

	points[aidx].distance=0;
	points[aidx].prev=aidx;
	for(Set<int>::Element *E=points[aidx].connections.front();E;E=E->next()) {

		open_list.insert(E->get());
		points[E->get()].distance=from.distance_to(points[E->get()].pos);
		points[E->get()].prev=aidx;

	}

	bool found_route=false;

	while(true) {

		if (open_list.size()==0) {
			printf("open list empty\n");
			break;
		}
		//check open list

		int least_cost_point=-1;
		float least_cost=1e30;

		//this could be faster (cache previous results)
		for (Set<int>::Element *E=open_list.front();E;E=E->next()) {

			const Point& p =points[E->get()];
			float cost = p.distance;
			cost+=p.pos.distance_to(to);
			cost+=p.penalty;

			if (cost<least_cost) {

				least_cost_point=E->get();
				least_cost=cost;
			}
		}

		Point &np = points[least_cost_point];
		//open the neighbours for search

		for(Set<int>::Element *E=np.connections.front();E;E=E->next()) {

			Point& p =points[E->get()];
			float distance = np.pos.distance_to(p.pos) + np.distance;

			if (p.prev!=-1) {
				//oh this was visited already, can we win the cost?

				if (p.distance>distance) {

					p.prev=least_cost_point; //reasign previous
					p.distance=distance;
				}
			} else {
				//add to open neighbours

				p.prev=least_cost_point;
				p.distance=distance;
				open_list.insert(E->get());

				if (E->get()==bidx) {
					//oh my reached end! stop algorithm
					found_route=true;
					break;

				}

			}
		}

		if (found_route)
			break;

		open_list.erase(least_cost_point);
	}

	if (found_route) {
		int at = bidx;
		path.push_back(points[at].pos);
		do {
			at=points[at].prev;
			path.push_back(points[at].pos);
		} while (at!=aidx);

		path.invert();;
	}

	for(int i=0;i<points.size()-2;i++) {

		points[i].connections.erase(aidx);
		points[i].connections.erase(bidx);
		points[i].prev=-1;
		points[i].distance=0;
	}

	points[aidx].connections.clear();
	points[aidx].prev=-1;
	points[aidx].distance=0;
	points[bidx].connections.clear();
	points[bidx].prev=-1;
	points[bidx].distance=0;

	return path;
}

void PolygonPathFinder::_set_data(const Dictionary& p_data) {

	ERR_FAIL_COND(!p_data.has("points"));
	ERR_FAIL_COND(!p_data.has("connections"));
	ERR_FAIL_COND(!p_data.has("segments"));
	ERR_FAIL_COND(!p_data.has("bounds"));

	DVector<Vector2> p=p_data["points"];
	Array c=p_data["connections"];

	ERR_FAIL_COND(c.size()!=p.size());
	if (c.size())
		return;

	int pc = p.size();
	points.resize(pc+2);

	DVector<Vector2>::Read pr=p.read();
	for(int i=0;i<pc;i++) {
		points[i].pos=pr[i];
		DVector<int> con=c[i];
		DVector<int>::Read cr=con.read();
		int cc=con.size();
		for(int j=0;j<cc;j++) {

			points[i].connections.insert(cr[j]);
		}

	}

	if (p_data.has("penalties")) {

		DVector<float> penalties=p_data["penalties"];
		if (penalties.size()==pc) {
			DVector<float>::Read pr = penalties.read();
			for(int i=0;i<pc;i++) {
				points[i].penalty=pr[i];
			}
		}
	}

	DVector<int> segs=p_data["segments"];
	int sc=segs.size();
	ERR_FAIL_COND(sc&1);
	DVector<int>::Read sr = segs.read();
	for(int i=0;i<sc;i+=2) {

		Edge e(sr[i],sr[i+1]);
		edges.insert(e);
	}
	bounds=p_data["bounds"];

}

Dictionary PolygonPathFinder::_get_data() const{

	Dictionary d;
	DVector<Vector2> p;
	DVector<int> ind;
	Array connections;
	p.resize(points.size()-2);
	connections.resize(points.size()-2);
	ind.resize(edges.size()*2);
	DVector<float> penalties;
	penalties.resize(points.size()-2);
	{
		DVector<Vector2>::Write wp=p.write();
		DVector<float>::Write pw=penalties.write();

		for(int i=0;i<points.size()-2;i++) {
			wp[i]=points[i].pos;
			pw[i]=points[i].penalty;
			DVector<int> c;
			c.resize(points[i].connections.size());
			{
				DVector<int>::Write cw=c.write();
				int idx=0;
				for (Set<int>::Element *E=points[i].connections.front();E;E=E->next()) {
					cw[idx++]=E->get();
				}
			}
			connections[i]=c;
		}
	}
	{

		DVector<int>::Write iw=ind.write();
		int idx=0;
		for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {
			iw[idx++]=E->get().points[0];
			iw[idx++]=E->get().points[1];
		}

	}

	d["bounds"]=bounds;
	d["points"]=p;
	d["penalties"]=penalties;
	d["connections"]=connections;
	d["segments"]=ind;

	return d;

}

bool PolygonPathFinder::is_point_inside(const Vector2& p_point) const {

	return _is_point_inside(p_point);
}

Vector2 PolygonPathFinder::get_closest_point(const Vector2& p_point) const {

	float closest_dist=1e20;
	Vector2 closest_point;

	for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {

		const Edge& e=E->get();
		Vector2 seg[2]={
			points[e.points[0]].pos,
			points[e.points[1]].pos
		};

		Vector2 closest = Geometry::get_closest_point_to_segment_2d(p_point,seg);
		float d = p_point.distance_squared_to(closest);

		if (d<closest_dist) {
			closest_dist=d;
			closest_point=closest;
		}
	}

	ERR_FAIL_COND_V(closest_dist==1e20,Vector2());

	return closest_point;
}

Vector<Vector2> PolygonPathFinder::get_intersections(const Vector2& p_from, const Vector2& p_to) const {

	Vector<Vector2> inters;

	for (Set<Edge>::Element *E=edges.front();E;E=E->next()) {
		Vector2 a = points[E->get().points[0]].pos;
		Vector2 b = points[E->get().points[1]].pos;

		Vector2 res;
		if (Geometry::segment_intersects_segment_2d(a,b,p_from,p_to,&res)) {
			inters.push_back(res);
		}
	}

	return inters;

}

Rect2 PolygonPathFinder::get_bounds() const {

	return bounds;
}

void PolygonPathFinder::set_point_penalty(int p_point,float p_penalty) {

	ERR_FAIL_INDEX(p_point,points.size()-2);
	points[p_point].penalty=p_penalty;
}

float PolygonPathFinder::get_point_penalty(int p_point) const {

	ERR_FAIL_INDEX_V(p_point,points.size()-2,0);
	return points[p_point].penalty;

}

void PolygonPathFinder::_bind_methods() {

	ObjectTypeDB::bind_method(_MD("setup","points","connections"),&PolygonPathFinder::setup);
	ObjectTypeDB::bind_method(_MD("find_path","from","to"),&PolygonPathFinder::find_path);
	ObjectTypeDB::bind_method(_MD("get_intersections","from","to"),&PolygonPathFinder::get_intersections);
	ObjectTypeDB::bind_method(_MD("get_closest_point","point"),&PolygonPathFinder::get_closest_point);
	ObjectTypeDB::bind_method(_MD("is_point_inside","point"),&PolygonPathFinder::is_point_inside);
	ObjectTypeDB::bind_method(_MD("set_point_penalty","idx","penalty"),&PolygonPathFinder::set_point_penalty);
	ObjectTypeDB::bind_method(_MD("get_point_penalty","idx"),&PolygonPathFinder::get_point_penalty);

	ObjectTypeDB::bind_method(_MD("get_bounds"),&PolygonPathFinder::get_bounds);
	ObjectTypeDB::bind_method(_MD("_set_data"),&PolygonPathFinder::_set_data);
	ObjectTypeDB::bind_method(_MD("_get_data"),&PolygonPathFinder::_get_data);

	ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY,"data",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_data"),_SCS("_get_data"));

}

PolygonPathFinder::PolygonPathFinder()
{
}