text:
using System;
using System.Collections.Generic;
using System.Text;

namespace Umbraco.Core.Media.Exif
{
	/// <summary>
	/// Represents a collection of <see cref="ExifProperty"/> objects.
	/// </summary>
	internal class ExifPropertyCollection : IDictionary<ExifTag, ExifProperty>
	{
		#region Member Variables
        private ImageFile parent;
		private Dictionary<ExifTag, ExifProperty> items;
		#endregion

		#region Constructor
		internal ExifPropertyCollection (ImageFile parentFile)
		{
            parent = parentFile;
			items = new Dictionary<ExifTag, ExifProperty> ();
		}
		#endregion

		#region Properties
		/// <summary>
		/// Gets the number of elements contained in the collection.
		/// </summary>
		public int Count {
			get { return items.Count; }
		}
		/// <summary>
		/// Gets a collection containing the keys in this collection.
		/// </summary>
		public ICollection<ExifTag> Keys {
			get { return items.Keys; }
		}
		/// <summary>
		/// Gets a collection containing the values in this collection.
		/// </summary>
		public ICollection<ExifProperty> Values {
			get { return items.Values; }
		}
		/// <summary>
		/// Gets or sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		public ExifProperty this[ExifTag key] {
			get { return items[key]; }
			set {
				if (items.ContainsKey (key))
					items.Remove (key);
				items.Add (key, value);
			}
		}
		#endregion

		#region ExifProperty Collection Setters
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, byte value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifByte (key, value));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, string value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			if (key == ExifTag.WindowsTitle || key == ExifTag.WindowsComment || key == ExifTag.WindowsAuthor || key == ExifTag.WindowsKeywords || key == ExifTag.WindowsSubject) {
				items.Add (key, new WindowsByteString (key, value));
			} else {
				items.Add (key, new ExifAscii (key, value, parent.Encoding));
			}
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, ushort value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifUShort (key, value));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, int value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifSInt (key, value));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, uint value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifUInt (key, value));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, float value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifURational (key, new MathEx.UFraction32 (value)));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, double value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifURational (key, new MathEx.UFraction32 (value)));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, object value)
		{
			Type type = value.GetType ();
			if (type.IsEnum) {
				Type etype = typeof(ExifEnumProperty<>).MakeGenericType (new Type[] { type });
				object prop = Activator.CreateInstance (etype, new object[] { key, value });
				if (items.ContainsKey (key))
					items.Remove (key);
				items.Add (key, (ExifProperty)prop);
			} else
				throw new ArgumentException ("No exif property exists for this tag.", "value");
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		/// <param name="encoding">String encoding.</param>
		public void Set (ExifTag key, string value, Encoding encoding)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifEncodedString (key, value, encoding));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="value">The value of tag.</param>
		public void Set (ExifTag key, DateTime value)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifDateTime (key, value));
		}
		/// <summary>
		/// Sets the <see cref="ExifProperty"/> with the specified key.
		/// </summary>
		/// <param name="key">The tag to set.</param>
		/// <param name="d">Angular degrees (or clock hours for a timestamp).</param>
		/// <param name="m">Angular minutes (or clock minutes for a timestamp).</param>
		/// <param name="s">Angular seconds (or clock seconds for a timestamp).</param>
		public void Set (ExifTag key, float d, float m, float s)
		{
			if (items.ContainsKey (key))
				items.Remove (key);
			items.Add (key, new ExifURationalArray (key, new MathEx.UFraction32[] { new MathEx.UFraction32 (d), new MathEx.UFraction32 (m), new MathEx.UFraction32 (s) }));
		}
		#endregion

		#region Instance Methods
		/// <summary>
		/// Adds the specified item to the collection.
		/// </summary>
		/// <param name="item">The <see cref="ExifProperty"/> to add to the collection.</param>
		public void Add (ExifProperty item)
		{
			ExifProperty oldItem = null;
			if (items.TryGetValue (item.Tag, out oldItem))
				items[item.Tag] = item;
			else
				items.Add (item.Tag, item);
		}
		/// <summary>
		/// Removes all items from the collection.
		/// </summary>
		public void Clear ()
		{
			items.Clear ();
		}
		/// <summary>
		/// Determines whether the collection contains an element with the specified key.
		/// </summary>
		/// <param name="key">The key to locate in the collection.</param>
		/// <returns>
		/// true if the collection contains an element with the key; otherwise, false.
		/// </returns>
		/// <exception cref="T:System.ArgumentNullException">
		/// <paramref name="key"/> is null.</exception>
		public bool ContainsKey (ExifTag key)
		{
			return items.ContainsKey (key);
		}
		/// <summary>
		/// Removes the element with the specified key from the collection.
		/// </summary>
		/// <param name="key">The key of the element to remove.</param>
		/// <returns>
		/// true if the element is successfully removed; otherwise, false.  This method also returns false if <paramref name="key"/> was not found in the original collection.
		/// </returns>
		/// <exception cref="T:System.ArgumentNullException">
		/// <paramref name="key"/> is null.</exception>
		public bool Remove (ExifTag key)
		{
			return items.Remove (key);
		}
		/// <summary>
		/// Removes all items with the given IFD from the collection.
		/// </summary>
		/// <param name="ifd">The IFD section to remove.</param>
		public void Remove (IFD ifd)
		{
			List<ExifTag> toRemove = new List<ExifTag> ();
			foreach (KeyValuePair<ExifTag, ExifProperty> item in items) {
				if (item.Value.IFD == ifd)
					toRemove.Add (item.Key);
			}
			foreach (ExifTag tag in toRemove)
				items.Remove (tag);
		}
		/// <summary>
		/// Gets the value associated with the specified key.
		/// </summary>
		/// <param name="key">The key whose value to get.</param>
		/// <param name="value">When this method returns, the value associated with the specified key, if the key is found; otherwise, the default value for the type of the <paramref name="value"/> parameter. This parameter is passed uninitialized.</param>
		/// <returns>
		/// true if the collection contains an element with the specified key; otherwise, false.
		/// </returns>
		/// <exception cref="T:System.ArgumentNullException">
		///	<paramref name="key"/> is null.</exception>
		public bool TryGetValue (ExifTag key, out ExifProperty value)
		{
			return items.TryGetValue (key, out value);
		}
		/// <summary>
		/// Returns an enumerator that iterates through a collection.
		/// </summary>
		/// <returns>
		/// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
		/// </returns>
		public IEnumerator<ExifProperty> GetEnumerator ()
		{
			return Values.GetEnumerator ();
		}
		#endregion

		#region Hidden Interface
		/// <summary>
		/// Adds an element with the provided key and value to the <see cref="T:System.Collections.Generic.IDictionary`2"/>.
		/// </summary>
		/// <param name="key">The object to use as the key of the element to add.</param>
		/// <param name="value">The object to use as the value of the element to add.</param>
		/// <exception cref="T:System.ArgumentNullException">
		/// 	<paramref name="key"/> is null.</exception>
		/// <exception cref="T:System.ArgumentException">An element with the same key already exists in the <see cref="T:System.Collections.Generic.IDictionary`2"/>.</exception>
		/// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IDictionary`2"/> is read-only.</exception>
		void IDictionary<ExifTag, ExifProperty>.Add (ExifTag key, ExifProperty value)
		{
			Add (value);
		}
		/// <summary>
		/// Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
		/// </summary>
		/// <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
		/// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception>
		void ICollection<KeyValuePair<ExifTag, ExifProperty>>.Add (KeyValuePair<ExifTag, ExifProperty> item)
		{
			Add (item.Value);
		}
		bool ICollection<KeyValuePair<ExifTag, ExifProperty>>.Contains (KeyValuePair<ExifTag, ExifProperty> item)
		{
			throw new NotSupportedException ();
		}
		/// <summary>
		/// Copies the elements of the <see cref="T:System.Collections.Generic.ICollection`1"/> to an <see cref="T:System.Array"/>, starting at a particular <see cref="T:System.Array"/> index.
		/// </summary>
		/// <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the elements copied from <see cref="T:System.Collections.Generic.ICollection`1"/>. The <see cref="T:System.Array"/> must have zero-based indexing.</param>
		/// <param name="arrayIndex">The zero-based index in <paramref name="array"/> at which copying begins.</param>
		/// <exception cref="T:System.ArgumentNullException">
		/// 	<paramref name="array"/> is null.</exception>
		/// <exception cref="T:System.ArgumentOutOfRangeException">
		/// 	<paramref name="arrayIndex"/> is less than 0.</exception>
		/// <exception cref="T:System.ArgumentException">
		/// 	<paramref name="array"/> is multidimensional.-or-<paramref name="arrayIndex"/> is equal to or greater than the length of <paramref name="array"/>.-or-The number of elements in the source <see cref="T:System.Collections.Generic.ICollection`1"/> is greater than the available space from <paramref name="arrayIndex"/> to the end of the destination <paramref name="array"/>.-or-Type <paramref name="T"/> cannot be cast automatically to the type of the destination <paramref name="array"/>.</exception>
		void ICollection<KeyValuePair<ExifTag, ExifProperty>>.CopyTo (KeyValuePair<ExifTag, ExifProperty>[] array, int arrayIndex)
		{
			if (array == null)
				throw new ArgumentNullException ("array");
			if (arrayIndex < 0)
				throw new ArgumentOutOfRangeException ("arrayIndex");
			if (array.Rank > 1)
				throw new ArgumentException ("Destination array is multidimensional.", "array");
			if (arrayIndex >= array.Length)
				throw new ArgumentException ("arrayIndex is equal to or greater than the length of destination array", "array");
			if (arrayIndex + items.Count > array.Length)
				throw new ArgumentException ("There is not enough space in destination array.", "array");

			int i = 0;
			foreach (KeyValuePair<ExifTag, ExifProperty> item in items) {
				if (i >= arrayIndex) {
					array[i] = item;
				}
				i++;
			}
		}
		/// <summary>
		/// Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
		/// </summary>
		/// <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only; otherwise, false.</returns>
		bool ICollection<KeyValuePair<ExifTag, ExifProperty>>.IsReadOnly {
			get { return false; }
		}
		/// <summary>
		/// Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
		/// </summary>
		/// <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.</param>
		/// <returns>
		/// true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>.
		/// </returns>
		/// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.</exception>
		bool ICollection<KeyValuePair<ExifTag, ExifProperty>>.Remove (KeyValuePair<ExifTag, ExifProperty> item)
		{
			throw new NotSupportedException ();
		}
		/// <summary>
		/// Returns an enumerator that iterates through a collection.
		/// </summary>
		/// <returns>
		/// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
		/// </returns>
		System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ()
		{
			return GetEnumerator ();
		}
		/// <summary>
		/// Returns an enumerator that iterates through the collection.
		/// </summary>
		/// <returns>
		/// A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
		/// </returns>
		IEnumerator<KeyValuePair<ExifTag, ExifProperty>> IEnumerable<KeyValuePair<ExifTag, ExifProperty>>.GetEnumerator ()
		{
			return items.GetEnumerator ();
		}
		#endregion
	}
}


text:
Ascension Roman Catholic Community
Oktoberfest Highlights
Oktoberfest Pictures
Road to Renewal
Funerals 2021- 2023
Funerals 2023
Altar and Rosary Society
Lifelong Faith Formation Survey Form
Saint Vincent DePaul
Bereavement Society
Church Ministry
Baptism Announcements
Anointing Registration
Facebook Twitter Instagram Flocknote YouTube
Calendar List View
Calendar Page Selection All Events ----- Home (20+)
10:00 Sunday Mass
Month View January 29, 2023
Sunday, January 29, 10:00 AM - 11:00 AM
5:00p Daily Mass
Monday, January 30, 5:00 PM - 6:00 PM
7:30 Daily Mass
Tuesday, January 31, 7:30 AM - 8:00 AM
10:00 Bible Study
Month View February 1, 2023
Wednesday, February 1, 7:30 AM - 8:00 AM
Wednesday, February 1, 10:00 AM
6:30p Festival Choir
Thursday, February 2, 7:30 AM - 8:00 AM
Festival Choir
Thursday, February 2, 6:30 PM
4:00p Vigil Mass
Vigil Mass
Saturday, February 4, 4:00 PM - 5:00 PM
10:00 LLFF Ascension Parish All
LLFF Ascension Parish All
Sunday, February 5, 10:00 AM
Sunday, February 5, 10:00 AM - 11:00 AM
Tuesday, February 7, 7:30 AM - 8:00 AM
Month View February 10, 2023
Saturday, February 11, 4:00 PM - 5:00 PM
10:00 LLFF Resurrection Parish 2, 3, 11
LLFF Resurrection Parish 2, 3, 11
Sunday, February 12, 10:00 AM
Sunday, February 12, 10:00 AM - 11:00 AM
Tuesday, February 14, 7:30 AM - 8:00 AM
Wednesday, February 15, 7:30 AM - 8:00 AM
Wednesday, February 15, 10:00 AM
Thursday, February 16, 7:30 AM - 8:00 AM
Thursday, February 16, 6:30 PM
3:00p Mass/Bishop/ 175th Anniversary
Mass/Bishop/ 175th Anniversary
Sunday, February 19, 3:00 PM
Month View March 1, 2023
Wednesday, March 1, 7:30 AM - 8:00 AM
Wednesday, March 1, 10:00 AM
Thursday, March 2, 7:30 AM - 8:00 AM
Saturday, March 4, 4:00 PM - 5:00 PM

redpajama_set_name: RedPajamaCommonCrawl


Spot on observation. I woke up to the thought of shopping, but that's a whole different topic.
The Wahaca restaurant we went to is located in the London financial district, overlooking Canada square, and is probably not the type of touristic place you would consider if you are a first time visitor. Luckily, downtown London offers two more restaurants of the Wahaca chain so keep your eyes peeled for those, and you can thank me later.
The restaurant serves both tapas style dishes to share as well as full portions for the most hungry ones. The typical Mexican feel is gently mixed with tasteful interior design that resides on top of clarity and simplicity. The dishes have some air of sophistication to them. Seemingly simple combinations develop on so many levels once they touch the palate.
And if this is not sufficient, there are always the desserts. A classic churros y chocolate is a must if you want to experience real Mexicanicity. Don't arch your brows in disbelieve. Once you try them, you will know Mexicanicity is a word.
Cactus taco looks so delii.I really love your restaurant experiences.Oh how I miss London,there's lots of beautiful different kind restaurants there.
I'm hungry jajajajjaja I love the mexican food 😉 Yummy!


text:
De Fomóiri zijn wezens uit de Ierse mythologie die Ierland bewoonden voor de komst van de Tuatha Dé Danann. Ze worden meestal beschreven als mismaakte reuzen.

Volgens Lebor Gabála Érenn zouden ze al in Ierland geleefd hebben toen Partholon daar na de zondvloed aankwam. Zowel het volk van Partholon als dat van Nemed voerden oorlog met de Fomóiri, maar de Fir Bolg schijnen hen niet ontmoet te hebben. De Tuatha Dé Danann werden een tijdlang geregeerd door Bres, de zoon van Elatha de Formóiri en Ériu van de Tuatha Dé Danann, doch zijn wanbestuur leidde tot een oorlog tussen de twee stammen.

Ierse mythologie

redpajama_set_name: RedPajamaWikipedia


Last week NCR announced a partnership with uGenius that will result in a new NCR device adding real time video to the ATM experience. The new NCR APTRA Interactive Teller ATM, based on its successful SelfServ 32 platform will add hardware components such as a Speaker, photo ID scanner, signature capture device, microphone and handset along with uGenius software at the ATM and in the back office. The uGenius software will be installed along with NCR's own APTRA Activate. The announcement did not commit to availability or pricing for the new personal teller machines.
PTMs deliver improved customer intimacy with a modest cost increment over ATMs – still delivering lower per transaction costs than traditional branch transactions.
PTMs will broaden the transaction mix versus ATMs – thus far an unproven assertion (I think).
PTMs will likely show improved sales lead generation results over ATMs through the more personal interaction with a live teller.
Regardless of the adoption mechanisms, the partnership is a good thing. uGenius delivered a solid concept and has the market research to suggest strong consumer acceptance of PTMs. But, it lacked the scalability and credibility to win over the larger banks. NCR changes all that. Moreover, the resulting NCR APTRA Interactive Teller ATM will be superior to the uGenius PTMs in several ways. For starters, the devices will be PCI compliant so consumers can authenticate the way they're used to doing – using a debit card and PIN, rather than relying on a photo ID scanner. And, we expect the units will be fully Check 21 enabled and integrated with legacy teller systems. But these are window dressing compared to the primary differentiator. The new device isn't just a PTM. It can function as a multifunction ATM or a PTM at the customer's discretion (if so enabled by the financial institution). So, tellers may not be needed or used for the millions of consumers more than comfortable with self-directed ATM transactions. But for those in need of coaching or just plain preferring a human interaction, the PTM's remote teller will be at your beckon call. This, in our opinion, is a natural evolution of the ATM.


The AT8464 allows for conversion of a single ear worn BP892 MicroSet microphone to a dual ear worn unit for stability and comfort. The BP892 fits on either side of the dual ear microphone mount, allowing the microphone to be worn to either the left or right of the mouth. The headband adjusts to fit both children and adults. The AT8464 is compatible with all BP892 and AT892 MicroSet models.


text:
knowledge-based programming
March 1, 2014 6:08 AM Subscribe
Starting to Demo the Wolfram Language (via; previously ;)
also btw...
-Berg's Cloudwash prototype
-Project Tango (previously)
that is all!
posted by kliuless (54 comments total) 29 users marked this as a favorite
Still doesn't correctly answer the question raised in the last post.
posted by escabeche at 6:20 AM on March 1, 2014 [2 favorites]
Software development's ultimate clown car.
posted by Foci for Analysis at 6:25 AM on March 1, 2014 [10 favorites]
I wish he wouldn't gesture with his hands like that.
posted by Obscure Reference at 6:39 AM on March 1, 2014
It's like the mechanical automata of the 17th century - not trivial at all, nicely adorned, mostly useless, and one day we'll have the real thing and it will be pretty good.
posted by dhoe at 6:59 AM on March 1, 2014 [6 favorites]
This will change the world just as Wolfram Alpha has!
posted by Poldo at 7:17 AM on March 1, 2014 [6 favorites]
I'll say this much about Wolfram Alpha -- smart high school kids use it to leverage their understanding of math and other subjects in ways that are pretty neat.
posted by srt19170 at 7:27 AM on March 1, 2014 [12 favorites]
I learned how to use Mathematica about 8 or 9 years ago now. It's amazing how far it has come in that time. The language looks to be pretty much the same syntax, just with a whole bunch more models built in already.
posted by Roger Dodger at 7:28 AM on March 1, 2014 [2 favorites]
Grrr I feel strongly about this but I don't know how to express it. I do absolutely agree that this direction is great. I've used Mathematica for 20 years and it's damn handy. I love the Raspberry Pi. I teach CS students how to scrape the web, manipulate information, and produce useful outputs using Python and its many libraries, and I'd even push this as a gen-ed requirement at my big state university.
But if Wolfram keeps framing this type of activity as a new thing or FFS a new kind of thing, then it's just going to keep producing eye-rolls. Facebook didn't succeed because they impressed us with how transformative and different it was. It succeeded because it blended naturally with people's lives.
I really want people to understand that they are empowered to integrate the technologies that surround them, to serve them better. To do that, we can't stress that there's something new to be practiced and mastered. It must instead be presented as a natural extension of their everyday use of that tech.
posted by rlk at 7:55 AM on March 1, 2014 [31 favorites]
My thoughts exactly, rlk. Or: If Mathemtica is so wonderful, why do I keep reaching for my spreadsheet?
posted by RobotVoodooPower at 8:01 AM on March 1, 2014 [3 favorites]
The hype seems to be a strawman. He's not saying it will change the world or that it is some revolutionary tool that will make existing tools obsolete. It's just a cool tool. If you don't like it don't use it. Personally I think looks incredible, but no idea how much it will cost or how easy it is to create useful (not just cool) applications.
posted by stbalbach at 8:02 AM on March 1, 2014
This is the sort of thing that will seem almost magically prescient when it works, which it will over a large terrain of cases which the developers have anticipated and an impressive chunk of terrain which they haven't specifically thought through. But it will also fail hilariously in many other cases, often indistinguishable to humans from the cases where it seems to work, and you will never know going into a problem with it which set your problem is in.
"Who is the king of the Moon?" shouldn't be all that difficult for something so powerful to correctly parse.
posted by localroger at 8:09 AM on March 1, 2014
Introducing a new closed source language today is a risky move.
posted by idiopath at 8:33 AM on March 1, 2014 [4 favorites]
Is it closed source?
posted by xmutex at 8:36 AM on March 1, 2014
The specification for CDF is open-ish, but you need closed-source tools like Mathematica to create CDF files. Not dissimilar from the early days of PDF.
posted by Blazecock Pileon at 8:47 AM on March 1, 2014 [1 favorite]
I'm fairly well read and educated (PhD + postdoc), and without context, I don't have any idea what you mean by that question.
posted by 445supermag at 8:50 AM on March 1, 2014 [1 favorite]
Actual incident:
I had a student who I was helping with a problem, and we got to the point where he needed to do a calculation, something like "(1.731 - 1.5)/0.25". I left him to work that out and help another student. When I came back to him he had his answer. It was "0.924 x".
I boggled. x? There wasn't an x in the problem. Where had it come from? I knew that he wasn't a very hard working student, and could see that he hadn't brought a calculator like students were required. Turns out he had thrown it into some search engine and ended up at the Wolfram Online Integrator, which had evaluated his formula and integrated it dx.
This is no slam against the quality of Wolfram's tools, but it really brought home to me that the easier they are to use, the more likely they are to be used by people who have no idea what they mean.
posted by benito.strauss at 8:58 AM on March 1, 2014 [16 favorites]
I have been working towards waiting to finally watch this promotional video for the past 30 years.
How does a person become comfortable using their last name for most of their software products, programming languages, and even some select proprietary data formats? Working for Wolfram sounds much more gratifying if your last name is Wolfram. I wonder if they subsidize last name changing for their employees.
posted by oceanjesse at 9:01 AM on March 1, 2014 [5 favorites]
How much of the stuff shown in the video is actually new? I don't have access to an installation of Mathematica at the moment, but it doesn't seem like that big a step up from what recent versions of Mathematica have been capable of.
How does a person become comfortable using their last name for most of their software products, programming languages, and even some select proprietary data formats?
Eww, yes. When I worked on a small software project for my high school together with a friend, he started referring to the path description language I came up with for the project as "SPS" in the source code, which was short for "[my last name] PostScript". Almost a decade later, that name still makes me cringe.
posted by wachhundfisch at 9:31 AM on March 1, 2014
I think the big new thing is the promised frictionless hosted deployment / service creation. It's a lucrative move if it pays off. The endgame is companies with key parts of their infrastructure running on Wolfram©®™ hardware. This is basically setting up their dominos for future rent seeking / gouging.
I was tired when I commented above. The closed source language is old, the novel thing here is the pay-as-you-go deployment trap revenue plan. Someone could of course use the quasi-open spec and try to reverse engineer an alternative, but who knows how that would turn out.
posted by idiopath at 9:45 AM on March 1, 2014 [1 favorite]
If Mathemtica is so wonderful, why do I keep reaching for my spreadsheet?
I know people who do word processing tasks in Excel.
I think that is explained in Strunk & White, or maybe Bartleby.
posted by charlie don't surf at 10:03 AM on March 1, 2014 [4 favorites]
This looks really awesome. But I'm not a real Mathematica user now, although I often reach for the ole Wolfram-Alpha.
posted by zscore at 10:13 AM on March 1, 2014
So, it suggested a word cloud for something when I tried alpha... and for the life of me I can't figure out how to get a word cloud out of the Gettysburg address.
(No, not this address: 1195 Baltimore Pike,Gettysburg, PA)
Google on the other hand, came up with this
posted by MikeWarot at 10:27 AM on March 1, 2014 [1 favorite]
Your degree is obviously not in MeFi studies, 445supermag: Who is the king of the Moon?
posted by eeriegongs at 10:48 AM on March 1, 2014 [1 favorite]
And the more likely they will create people who have no idea what they mean. I was a lazy mathematics student that was well-endowed with mathematics technology. It's extremely tempting to just give up on the subject when you hit the limits of your automated tools, because there's just too much to catch up on by that point.
posted by cosmic.osmo at 11:13 AM on March 1, 2014
But if Wolfram keeps framing this type of activity as a new thing or FFS a new kind of thing, then it's just going to keep producing eye-rolls.
I agree with almost everything you say, but I have to admit that a lot of this really does look pretty new to me. I mean, of course one could technically do all these things with existing programming languages. Technically. But at least based on these canned demonstrations, I'm seeing ridiculous amounts of power. Also, I don't fully understand how knowledge is so deeply integrated into the language itself, except to say that I personally haven't seen anything like it. Built-in support for semantics in an actual programming language could be very exciting, if that's what this is. Perhaps I'm getting ahead of myself, because my impressions are based solely on this video.
I definitely want to put some research into this, because it could actually be pertinent to my work. I have often got the impression that Wolfram has this tendency to put together some very nice tools and ideas, but make excessive claims of novelty. Alpha has always struck me as more of an interesting toy than a useful tool, and his notion of cellular automata struck me as an intriguing reframing that didn't contribute much. Mathematica, on the other hand, is great software that has served generations of scientists.
posted by Edgewise at 11:20 AM on March 1, 2014
It's odd that he calls it a language, which has a precise meaning in computer science/engineering. It's more of a really, really neat library backed by a massive online knowledge database, right?
posted by spiderskull at 11:21 AM on March 1, 2014 [2 favorites]
(I should add that you can do symbolic variables in quite a few languages, including Python if you design your classes cleverly)
posted by spiderskull at 11:23 AM on March 1, 2014
Well for me this was the top result on Google.
And I'm not clear but it seems you're comparing whether something can generate a new thing to whether it can find it, assuming someone else has already generated it and put it online. They seem like very different tasks.
posted by RobotHero at 11:28 AM on March 1, 2014
Maybe I'm not educated enough to confuse myself on this issue, but I really can't think of any context where "There is no king of the Moon" isn't the most appropriate response.
posted by localroger at 11:57 AM on March 1, 2014 [2 favorites]
Stephen Wolfram is the original grey goo, turning everything he touches into more Stephen Wolfram.
posted by benzenedream at 12:07 PM on March 1, 2014 [7 favorites]
I liked this demo so much that I did something I hadn't done yet this year, since there's no need any more. I emailed this link out to several people.
As a tech demo, it is like a music video. No second is wasted. It is fantastic.
posted by sieve a bull at 12:42 PM on March 1, 2014
I mean, of course one could technically do all these things with existing programming languages. Technically. But at least based on these canned demonstrations, I'm seeing ridiculous amounts of power.
The "rent-seeking" seems to come from joining a potentially expressive (if closed) language and development environment with backend data curated by Wolfram's company.
Basically, when using this, you're paying (through license fees for Mathematica or other components) for someone in a Wolfram office somewhere in the world to sit down and catalog data — to assign words for colors and other descriptors to world flags, for instance, or to write routines that join social network data with geographical locations or other metadata — in such a way that the functional language can quickly retrieve and operate on metadata to calculate an accurate result.
Curation of data isn't free. That's why the open/closed nature of this doesn't really faze me. This is a big deal in genomics, for instance. Here, biological experiments are expensive, time-consuming and hard, and they need lots of specialized, intelligent labor to massage data into something that can be consumed by equally-specialized bioinformaticists and their oft bespoke software. I see no problem with this costing a reasonable amount of money, in the cases where a public consortium cannot achieve the same results.
I can't see an open model supporting an equivalent to Wolfram Language until a closed-source tool is demonstrated to be successful and important enough, such that people would want to actively sponsor and contribute to an open-source project that would basically copy Wolfram's language, metadata and data. Perhaps that will happen one day, soon.
I don't know how useful this is to me in my work, where Wolfram's tools and databases are less useful, but I can see it useful to people in other similarly information-rich fields. If this project is closed, at least it is a private company that is wagering risk in its creation.
posted by Blazecock Pileon at 12:47 PM on March 1, 2014 [4 favorites]
Wolfram wolfram Wolfram wolfram wolfram wolfram Wolfram wolfram.
Really. "The Wolfram language." The man's egomania tends towards infinity over time.
posted by JHarris at 1:16 PM on March 1, 2014 [7 favorites]
Blazecock Pileon: My worry is about more than the closed language / datasets. Combine this with their cloud deployment option ("turn any program into an API instantly!") and you have a situation where:
the language definition and implementation is controlled by a single vendor
translation to another language is difficult
replacement of the upstream provided APIs / datasets is difficult
your API hosting options are limited to the same company that controls the language and the datasets
By developing your new API against a stack like that, you are building a pipeline from your bank account into Mr. Wolfram's.
posted by idiopath at 1:17 PM on March 1, 2014 [2 favorites]
"Facebook didn't succeed because they impressed us with how transformative and different it was. It succeeded because it blended naturally with people's lives. "
But then how come its interface makes me wretch?
posted by sutt at 2:10 PM on March 1, 2014
Yes, I agree that this is the boring part. The potentially interesting part, to me, is whether or not it provides a standard for, let's say, my company, to express its semantic data in a way that can be used with this language. I hear what you're saying about the closed nature of the platform, but I still don't to what degree it's closed (since I haven't done the research yet). If you're saying it does not provide an API for expressing my data, then it really does fall short of its potential, and in fact create a new market for more open imitators. If the idea is as sound as it looks, and as closed as you seem to suggest, that even seems inevitable.
posted by Edgewise at 2:23 PM on March 1, 2014 [1 favorite]
What's exciting to me is how much of this seems possible to implement freely (not encumbered by Wolfram's Company Store mentality) with, say, iPython/Sage and the Wikipedia datasets/namespace. The pieces are already there.
posted by kandinski at 2:35 PM on March 1, 2014
What's exciting to me is how much of this seems possible to implement freely (not encumbered by Wolfram's Company Store mentality) with, say, iPython/Sage and the Wikipedia datasets/namespace.
The devil is definitely in the details. As is always the case, the challenge is really about making all those pieces talk to each other. I'm not saying it's impossible (obviously), but it is a huge project.
Wikipedia lacks ontology, much less coherent application of an ontology within a genre of data. The structure and content of one movie actor's wiki page can differ entirely from that of another, for instance.
posted by Blazecock Pileon at 3:24 PM on March 1, 2014 [4 favorites]
Wikipedia lacks ontology
And yet is more popular than Blazecockopedia
posted by Reasonably Everything Happens at 8:08 PM on March 1, 2014 [1 favorite]
Curation of data isn't free. That's why the open/closed nature of this doesn't really faze me.
This is incredibly true. If this language is just a platform for sufficiently well-curated semantic data, that in itself could create tremendous value.
posted by Edgewise at 9:02 PM on March 1, 2014 [2 favorites]
And, further still, neither of us are good sources of data for what this language uses. Fancy that.
posted by Blazecock Pileon at 10:41 PM on March 1, 2014
I notice that KingOfTheMoon|Alpha has APIs for a number of open programming languages. I wonder how long those will last once this language launches.
posted by Omission at 1:40 AM on March 2, 2014
Wolfram Research only accomplishes anything because they exploit their connections with academia to chronically underpay their employees. Math and physics PhDs with software development experience routinely accept jobs with Wolfram that pay a piddling $50k without much advancement potential.
posted by jeffburdges at 1:55 AM on March 2, 2014 [4 favorites]
Math and physics PhDs with software development experience routinely accept jobs with Wolfram that pay a piddling $50k without much advancement potential.
Presumably they do not do so at gunpoint.
posted by sweet mister at 5:33 AM on March 2, 2014
A Rare Blend of Monster Raving Egomania and Utter Batshit Insanity
(this is the funniest book review ever posted on the internet)
posted by bukvich at 5:52 AM on March 2, 2014 [7 favorites]
By that logic there is no such thing as a bad employer.
posted by Omission at 6:48 AM on March 2, 2014 [2 favorites]
Wow. Yes. Yes it is. Thanks for the link. I stupidly read most of ANKOS and I had never seen this review.
posted by bh at 6:58 AM on March 2, 2014
If this language is just a platform for sufficiently well-curated semantic data, that in itself could create tremendous value.
I looked at the Financial library and basically the only thing it has is historical stock price data (daily closing price).
posted by stbalbach at 7:27 AM on March 2, 2014 [1 favorite]
An ex-academic's marketable skills are intently related to but differ wildly from their academic skills, so newly ex-academics have little clue what price their skills actually warrant on the market. You can often keep them cheap if you stick them in a podunk town with few other employers. If I were a tech head hunter, then I'd pursue Wolfram's younger employees with extreme gusto, absolute gold mine of underpaid talent.
posted by jeffburdges at 9:14 AM on March 2, 2014 [1 favorite]
Does your company offer autographed photos of Stephen Wolfram in the break room? Checkmate, recruiters.
posted by benzenedream at 9:20 AM on March 2, 2014
As a side note, the author of that, Cosma Shalizi is very smart, a good writer, and has a good critical eye about data and statistics. For example, "So You Think You Have a Power Law — Well Isn't That Special?". I've enjoyed following his blog in the past.
posted by benito.strauss at 9:21 AM on March 2, 2014
cosmic.osmo: "This is no slam against the quality of Wolfram's tools, but it really brought home to me that the easier they are to use, the more likely they are to be used by people who have no idea what they mean.
And the more likely they will create people who have no idea what they mean. I was a lazy mathematics student that was well-endowed with mathematics technology. It's extremely tempting to just give up on the subject when you hit the limits of your automated tools, because there's just too much to catch up on by that point."
Oh god, this. I am glad that I learned calculus before Wolfram Alpha because at least when I was having to get help from my roommate I figured out how to do stuff and some of it stuck. Whereas the ODE class I took, which was essentially based in Mathematica, has not been retained at all. Part of that is that I use calculus every day and stuff from differential equations less often, but I do think there's some merit in being forced to do math problems by hand over and over until they're second nature for someone who's going to work in something related to mathematics.
I also think that a lot of people who slog through a couple of semesters of calculus get to a point where they're want to throw up their hands and say "fuck it, I'm never taking an integral again" or "I'm never going to analytically solve a large system of equations again" because hey, that's what mathematica and Matlab are for, right? Which is a different kind of problem, but if you run into it I think it eventually becomes self-correcting to the extent that you quickly run into those tools' limitations (either they're hard to get working for your particular problem or are super slow computationally and it's just easier to program in the analytic solution to your problem...)
posted by dismas at 9:56 AM on March 2, 2014 [1 favorite]
CRS On Getting Tenure: "For myself, I feel — relieved, even pleased. Relieved and pleased, but not triumphant. I benefited from a huge number of lucky breaks. I know too many people who would be at least as good in this sort of job as I am, and would like such a job, but instead have ones which are far less good for them... I even have some fear that this has deformed my character, making some ordinary kinds of happiness insanely difficult... I worry about what I have given up for it..."
congrats, i guess?
posted by kliuless at 4:49 PM on March 4, 2014 [1 favorite]
« Older The Staunton Lick | If Stable and Efficient Banks Are Such a Good Idea... Newer »
After Capitalism, Humanism July 2, 2015
'Insanely more ambitious' than Google knowledge graph November 30, 2013
use value vs. exchange value September 1, 2012
Computable data* (conceivably knowable) about people May 1, 2009
The End of equations? January 27, 2002


December 1 — February 2, 2019 (POSTMARK deadline–for those using snail mail).
Please read the file preparation page prior to PAYING for email entries. Those who can't prep the file to specs need to enter a hard copy using the US Postal Service. Online payments will not be refunded.
Notification in April 2019 for Winter 2018/2019 publication.
Winner receives publication, 50 copies of the published book, and $1200.
Runners up will also be considered for publication.
Send between 52 and 88 pages of poetry (including section breaks), 8.5 X 11, no more than one poem per page, 12 point type in an easily readable font like Arial or Times New Roman.
Include 2 Title Pages: One with the TITLE ONLY, one with the title plus author's name and complete contact information.
Author's name should not appear anywhere else in contest entry.
Do Not include Dedication and/or Credits/Acknowledgements pages in entry.
If you want a notification of receipt and do not want to receive it by email, include a post card. Announcement of winners will be sent out via email and posted online. Those who prefer to receive a winners' list by US Postal should include a #10 SASE (This is a standard business size: 4 X 10).
No Manuscripts will be returned, so please DO NOT send a manuscript return envelope.
Although MSR frowns on simultaneous submissions for our magazine, it is acceptable for book contests. Upon notification, however, winner must immediately withdraw his/her manuscript from consideration elsewhere.
DO NOT USE US Postal Service Media Mail. The USPS has changed its standards for Media Mail and is enforcing it much more readily than it once did. First class is your best option.
DO NOT staple or bind manuscripts in any way. We have HUNDREDS of clips here from years of submissions and remove anything that comes in a binder or folder and throw away the binder or folder. If you want to pay for those materials and the additional shipping to get the manuscript here only to have it thrown away, that's your choice. All manuscripts go to readers in the same format.
DO NOT send anything that must be signed for (Signature Receipt or Express Mail) since it means having to stand in line to receive it and we don't have time for that–particularly on the days immediately preceding and immediately after the postmark deadline.
***Postage Saver Special*** For those who read all the way down the page!!!
Main Street Rag does allow for email submissions, but the guidelines are even more specific, so please read them carefully before choosing this option and give yourself enough time to prepare the manuscript file properly.
Was also a finalist for the LA Times Book of the Year.
for the Texas Institute of Letters Natalie Ornish Best Book of Poetry Award.


text:
'Queer Eye' star Bobby Berk explains why he didn't want to enter that church in season 2
By Tim Mulkerin
The hardest-working star on Netflix's makeover show Queer Eye is Bobby Berk, the interior designer who remodels entire houses in a week, while his co-stars go shopping, cook frittatas or teach scruffy men how to use a round brush. As such, Berk doesn't always get the on-screen recognition he deserves — because, you know, he's fending off termite infestations and installing marble countertops.
That unevenness in screen time shifts a bit in the recently released second season of Queer Eye. In the season premiere, we get a deep look at Bobby's painful history with religion, which was briefly touched on in the first season. When the Fab Five go to visit the episode's makeover subject, Tammye, at her local church, Bobby refuses to enter.
"I don't like being involved with the church, because there's so much hate against gays and fights against our basic rights that I have a hard time making peace with it," he says in the episode, after refusing to enter.
Later in the episode, Bobby admits that Tammye's unwavering kindness helped him realize that "not everyone that claims to be Christian is good, but there are a lot out there that are." Still, it's clear that there's a lot of pain there.
In a phone interview Friday, Bobby chatted about what it was like confronting his religious upbringing decades later — and what it's like reliving that moment yet again through watching the show. The following interview has been edited for length and clarity.
Bobby Berk and Tammye in 'Queer Eye' Netflix
Mic: The first time we talked, you said you accidentally spent hours on the couch responding to Instagram messages when the first season came out. Has the premiere of season two taken over your life in quite the same way?
Bobby Berk: The momentum from the first season honestly hadn't even stopped when season two came out. It's been a pretty consistent, wild road ever since the first time we talked. It's been kind of insane and amazing all at the same time. The amount of DMs that keep coming really hasn't stopped.
I think a lot of people, myself included, were surprised at how quickly the second season came around.
BB: Yeah, everyone thought it was going to come out in 2019. There were multiple, quite big news outlets who were reporting 2019, but everyone was quite wrong.
Yeah, you filmed both seasons back to back, right? So, it was more a matter of editing, I guess.
BB: Yeah, we did. We filmed 16 episodes right back to back, then they decided which ones to put in each season, and then it was just a matter of editing. I know they wanted the second season to feel a little different, even though we did film it at the same time. I think, in season two, you get to know me and the Fab Five a little bit more. You get to know more of our backstories.
The episode where you have the most defined emotional arc is the season two premiere, with Tammye, where you talk with her quite extensively about your history in the church. How has it been reliving that again through watching the show?
BB: It's emotional — I would say almost as emotional as living through it. I've seen the episodes multiple times and every time I watch it again, I think, "Oh, I probably won't cry this time." And no — I do again. It's still a very sensitive and emotional topic for me. It's not easier reliving it now than it was then.
That week was very hard for me. In the beginning, I actually refused to do the episode. I told [Queer Eye production group ITV Studios] when I first got cast that I'll do anything or help anybody — just don't ever ask me to go into a church. And I wasn't really happy when that's exactly what they asked me to do. But through a lot of conversations and thoughts, I decided to [participate in the episode], and I'm glad I did.
I really think the episode has spoken to a lot of people who have had this relationship that I've had with the church — and those who have not had a relationship with the church, through no choice of their own, but through the church turning their back on them. And I think a lot of people were able to relate to that and maybe get a little bit of healing, realizing it has happened to a lot of us and they're not alone.
Jonathan Van Ness, Tammye, Tan France and Bobby Berk in 'Queer Eye' Netflix
It's one thing to go through that journey of visiting the church in person and be by yourself in the moment, but what has the feedback been like from viewers of the episode? What have you been going through hearing other people react to it?
BB: I think the reaction I'm getting most is people being very happy that I did that [and refused to enter the church]. That I stood up and used that as a way to express my pain. That I used that as a way for thousands and thousands of other people to use it as a defining moment of expressing that this is what the church has done to us, and this is what the church continues to make gay people feel like, continues to make them feel unwelcome, continues to keep preaching hate, and make somebody who is in their late 30s still have so much pain from those situations that they won't even go into a church.
Bobby Berk in 'Queer Eye' Netflix
I think they're proud of me that I was able to draw a line and really, I think, reaffirm to people that our show is very real. Neither me nor the other Fab Five do anything we don't want to do, and our producers are really great at not forcing us to do so. They're really great in letting us not just tell the [makeover subject's] story, but to tell our story and allow people to go on that journey with us, and really show them that it's not produced.
I didn't know that day if I was going to go into the church. It was something we had talked about. I told producers, "You know what, when I get there, I don't know. We'll see." And when I got there, I couldn't. I had to know where to draw the line for my own mental health, and I think if I had gone into that church, we probably wouldn't have finished filming that episode that day because I would've broken down.