text:
Joe Willage
Friends and Followers: An Exercise in Applied Clustering
by Joe Willage
The idea for clustering Twitter handles started a few months ago. Initially, I had wanted to cluster users of an audience, mine for example. The idea was to gather all my followers and their most recent tweets (a couple hundred). Followers would be clustered by who they @reply to, or who they @mention in their tweets. This worked moderately well, but there wasn't enough data. Too few tweets were in reply to, or mentioned another user. The best configuration resulted in 11 clusters, 6 of which had themes that made sense, the rest were random. 2 of the clusters were less than 3 users. It was a start, but not entirely useful. I left comments throughout my code (pats self on back), one of which became this project.
# group recipients of replies by who else the senders reply to. ie me and D both tweet to A and to X, so cluster A and X. an alternate: group by who me and D both follow
What that morphed into is actually the transpose of the original idea: grouping Twitter handles by the users that follow them. Instead of clustering me and my homies D, A, and X, it's clustering the hockey blogs together, and the late night talk-show hosts together, and the tech news sites together.
The first step in all of this is obtaining the audience, and it's probably the easiest part. It's just looping through the Twitter API for followers/ids1. The rate limit's a bitch here, but eventually we get everything. Depending on the size of the audience, a random sample m may need to be created for the next step, which is getting those users' friends. 'Friends' is the terminology that Twitter uses for 'following'. I wish that was thought of when we were naming functions and variables, because 'followings' is just too similar to 'followers' and it makes things very confusing.
So, getting friends. This is another task where rate limiting really, really hurt (there's a joke in there somewhere, left for the reader to formulate). Using the friends/ids endpoint, we're able to retrieve 15 user's friends at a time. Twitter's rate limit window refreshes every 15 minutes. This is why a random sample may need to be taken.
Now the fun begins. The next step is creating a binary matrix, sized m x n, where m is the number of users in the audience (possibly sampled), and n is the number of friends to examine. Let's be real here. They're not friends. Maybe if you perform all this on your own handle, you'll get a cluster or two of people you know personally. But the majority of the 'friends' are celebrities and well-followed handles. Most of the Twitter users we examined follow between 100 and 1,000 accounts. For an audience of 200, that can be up to 200K handles. Sure there's overlap (that's exactly the thing we want to examine), but there's still going to be something like 100K friends. In creating the matrix, n needs to be the unique list of friends for this to work. So there's this large m x n matrix, a binary matrix, instantiated with all cells having a value of 0. The next part is a little CPU intensive, but finishes within a few minutes on a MacBook Air. Loop through each user, m, find which of the n friends they follow. For each handle they follow, mark that cell with a 1.
We need to know beforehand how many total friends we want to examine. This is the top X followed handles. 1,000 was chosen as the default, max_following. Next step is trimming down the binary matrix so that the number of columns n doesn't exceed this threshold. We want to end up with only the handles that have a sufficient number of followers (sum over each column). Starting at i = 1 and incrementing each iteration, examine how many handles have more than i followers. Call that variable s. If s < max_followings, exit the loop. s becomes the minimum number of followers for a friend to make the cut. This ensures we don't end up with more than the defined maximum. It's unlikely to hit that max right on the nose, which is fine; it's preferential to including the incomplete collection of handles with i - 1 followers.
If you weren't already having fun, you will now. Create a covariance matrix from the follower-friend binary matrix. This is used for a couple of things. First is an attempt to choose the number of clusters, k, with PCA. It's well documented that k-means clustering requires a value for k beforehand. There are a few tricks, though, like using the variance explained by feature extraction to determine k. Perform an eigendecomposition to retrieve the eigenvalues for the covariance matrix. This produces the matrix needed to calculate principal components. We cumulatively sum over the components (in decreasing order) until the component that pushes the explained variance past the threshold is hit. Unfortunately, that threshold needs to be predetermined, and it can be different for each audience examined. Some of the tests we ran gave a reasonable amount of clusters (components) with 99% variance explained. For other audiences, to explain just 70% variance would take several hundred clusters. It's useful here to still parameterize k, and use it as a maximum in case the PCA approach doesn't prove useful.
With a k in hand, the clustering can begin. We've been hitherto language-agnostic, but this part deserves a sidebar. In Python, the code was implemented with scikit-learn's KMeans function. Harmless enough. But clustering a covariance matrix of 22,000 x 22,000 took hours. It was painful. Thankfully it wasn't too long before the discovery of MiniBatchKMeans, another function in sklearn. It was life changing. It produced the same clusters in < 10 seconds. Seconds vs hours2. In addition to the cluster assignment output from MKM, we also retrieve the cluster-distance space, using the transform function. That's used to loop through each row (friend) and find the distance to the assigned cluster (minimum centroid distance). We also check to see if any other centroids were as close as 0.001 as the nearest centroid. This would mean the friend came very close to being assigned to that other cluster. So that's what we do ourselves: assign the friend to the second-place cluster, in addition to it's actual assigned cluster. Again, this is only for points that had < 0.001 between the top and second-best centroids.
That's the end of clustering.
If we stopped right here, we'd have a pretty good output. Around 1,000 of our audience's most followed handles, grouped together in 100 clusters. Let's take a look at the clusters. There's a lot of tech and sports and politics in there. A lot of clusters seem coherent, with low intra-cluster variance:
cluster 0 [Wired, TechCrunch, Mashable]
cluster 10 [Rockstar Games, Ubisoft, Nintendo America, Playstation, EA, Xbox, IGN]
cluster 20 [Hillary Clinton, Bill Clinton, POTUS, Barack Obama]
Some clusters have seemingly no relation:
cluster 45 [Dane Cook, Bobby Flay, JetBlue Deals, Foo Fighters, Ken Jennings, Florida Man, Zach Boychuk, Chris Hadfield, Blake Anderson, Weird Al, Daily Candy, Babe Walker, Dave Chapelle, Southwest Air, Rachel Zoe, Perez Hilton, JetBlue, Texts From Last Night]
cluster 83 [Rob Delaney, Vice, Edward Snowden, Dalai Lama, New York Magazine]
And there's a good amount that seem to have a theme, but also have a bunch of unrelated handles:
cluster 15 [SNL, Simon Cowell, Parks and Rec, Zac Efron, Chris Bosh, Ryan Reynolds, Eminem, Rob Gronkowski, Historical Pics, OMG Facts, John Legend, Miami Heat, The Rock] Starts off looking like TV but then we get a few sports-related and Twitter content
cluster 37 [Kendrick Lamar, Maroon 5, Adele, Bruno Mars, Ludacris, Adam Levine, Patriots, Miranda Lambert, Verizon, Kevin Hart, Kanye West] Starts off looking like popular bands/artists, but then we get the Patriots, Verizon, and Kevin Hart
These last groups may in fact be the most interesting, as they show what non-obvious relationships exist. With 100 clusters there's a lot to explore and interactions to try to tease out. We can also go a step further and see how these clusters relate to one another, hierarchically. In order to do that, we need another matrix, m x k. Here, m is again the audience (or audience sample), and k is the number of clusters. We loop through each user m, and note the handles they follow which are in the list of clustered friends. For instance, say a user follows 300 handles, 200 are personal friends and less popular handles, and the other 100 are well known handles, which have made their way into the clustering. Those 100 handles each belong to a cluster, k. For each cluster that has a member followed by this user, mark that cluster with a 1. Repeat for all users in the audience. We now have another binary matrix, this time of followers-clusters.
What we do now is not another k-means type clustering, but an agglomerative clustering. In order for this to work in Python we have to transpose the matrix, so the rows are the clusters and the columns are the sample. We use the SciPy linkage function to create the hierarchy among clusters. And bam! we're ready to graph. Actually, not bam. There's a ton of different methods to get the distances between clusters. SciPy supports 7 different linkage methods, and about 20 distance metrics3. Which one is the right one? The default linkage is Ward's method and the default metric is Euclidean distance. But we weren't sure if that would be appropriate for data like this.
We tested each of the available linkages with each of the supported distance metrics. Ward, centroid, and median linkages only support Euclidean distances. Single-link, complete-link, average (UPGMA), and weighted (WPGMA) support most of the distance.pdist functions. For each of the methods, the Euclidean distance turned out to produce the best looking dendrogram4. And at some point we want to name each cluster, so we don't have to look up which handles they map to.
Here are the results for each linkage:
Interesting because we see merges between clusters that haven't fully formed yet (all the upside down links), like the first merges on the right-hand side, the (Tech/Science + Discovery) cluster hasn't yet merged with the adjacent Health Insurers cluster, but it's already being joined to Pixar. This appears to be the case with many merges. This took a while to understand, but because the linkage is centroid based (basically k-means), the centroid isn't necessarily an observed point, but the theoretical point in the center of the observations. So a cluster may be closest to a centroid, but that cluster's points are still far away from each other (yet closer to each other than to the other centroid, else they would merge in as singletons). To visualize this, think of an isosceles triangle, with the third side being longer than the distance between it's midpoint and the top of the triangle. We managed to draw this after many pages of failed attempts. Another interesting note is the height at which merges occur. The large heights suggest the singletons are far apart. In this application, we see a lot of chaining of small clusters and singletons.
Centroid clustering. The X's mark the centroids, the bubbles mark the merges, the numbers are the order of the merges, the triangle is a helper.
Similar to centroid, we see a lot of pre-clustered merges. Unlike k-median, which uses an observed point as the cluster center, the median linkage creates a cluster center in space, like centroid. The difference here is that median uses the average of the two centroids to create the new centroid, whereas the centroid linkage creates an entirely new centroid based on the original points in the two clusters. Like centroid, we notice a lot of singleton and small-cluster merges, with no distinct groups.
Single-Link
Single-link merges based on the closest members within each cluster. Perhaps this is too optimistic an approach in this situation. We see an extreme chaining effect picking up singletons and pairs of singletons.
Complete-Link
The complete-link dendrogram is the first linkage we see that actually looks like a good choice. There are four distinct groups, which seem to make sense as they merge (of course, 'making sense' isn't exactly what we're looking for. The clusters and correlations exist as they will. More often than not we'll observe clusters and merges that logically make sense, but there's no right or wrong here, because Twitter users that follow NBA players, for example, don't necessarily follow NBA teams). Instead of measuring the distance between the closest cluster members, as in single-link, complete-link measures the distance between the furthest members between clusters.
UPGMA
Referred to as 'average', this linkage compares the distance of the unweighted average distance between members of two clusters. It's a compromise between single and complete-link, and indeed that's what happens in the dendrogram. The groups aren't as distinct as complete-link, but the chaining isn't as extreme as single-linking.
WPGMA
This weighted version of UPGMA treats clusters of different sizes equally. So small clusters are weighted to act like large clusters. The weighting does a decent job, and we get a dendrogram that could pass as a feasible option. Compared to complete-link, however, the one large group in the middle is inferior. There's no cut-off point that would result in splitting up the large cluster without also creating many small clusters from the other groups.
The default linkage does in fact look like the best option. Ward's method works by minimizing the intra-cluster variance after clusters are merged. We end up with 5 distinct groups, with distances that lend themselves nicely to changing the cutoff point to create more granular groups, or larger groups. We'll stick with the current cutoff at 15, though.
As mentioned above, no metrics performed better than Euclidean for determining the distance, so we won't bother filling up the screen with dozens of graphs. But the Chebyshev distance was noteworthy. For each linkage, it produced a dendrogram that looked like this:
A Socialist uniformity, as you might expect from a metric named Chebyshev.
https://dev.twitter.com/rest/reference/get/followers/ids ↩
https://twitter.com/joewillage/status/804447346146746368 ↩
https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.cluster.hierarchy.linkage.html#scipy.cluster.hierarchy.linkage ↩
"Best looking" is subjective, but in this application we're looking for a handful of distinct groups. There are other quantitative measurements of accuracy, such as the cophenetic correlation, which we looked at for each linkage/metric. ↩
Posted in analysis, comparison
tagged with twitter, clustering


text:
Q: Powerpivot diagram view keeps showing blank screen?
I wasn't exactly sure, whether to post this on superuser, given this is likely a visual bug,
  but who knows, maybe I'm just doing something incorrectly given I'm
  new to powerpivot

*

*I've recently imported rather large sets of data into my Excel.

*The import seemed to have went down fine, as data shows correctly inside my PowerPivot

Issue is, when I switch to the Diagram view, for some reason my excel keeps on showing blank screen, rather than the two tables in Diagram view.

Any idea what could be the cause behind the issue / how to fix it?
(Yes, I did try turning Excel off and on)

A: Two things to try:
1) Make sure "Show Hidden" is toggled in case the table you brought in accidentally got hidden some how.
2) It is possible that the table is there but you are zoomed in and the table is on a different part of the screen.There is a "Fit to Screen" button at the bottom right hand. Click this so you can see if the table is elsewhere off screen.
Thanks,
Brett
Fit to Screen Button

A: Have you tried manually creating a relationship between the two tables? I'm assuming that's what you're trying to do in Diagram View.
In Power Pivot, on the 'Design' tab, click 'Create Relationship'.  Select each table and the related column.  If you get a one-to-many error, flip the order of the tables.
If your two tables don't directly join, continue adding in your data and then create the relationships.  Then check the Diagram View and see if it cooperated.
Other ideas - try creating a dummy table in your Excel sheet, convert to a table, then use the 'Add to Data Model' command.  Your dummy table will show up in Power Pivot and maybe it will nudge PP into normal behavior.

A: I don't have an exact answer and I don't understand how/why it works, but at least it fixed the issue for me:

*

*Open the same file on a different computer (eg. I used my laptop)

*The diagram view should work now, save a separate copy of the file and upload it to your computer (where it doesn't work)

*The diagram view should work now.

Not really sure what caused this bug, or even why it fixed it, but it seemed to work :)

redpajama_set_name: RedPajamaStackExchange


text:
dormakaba Hungary
Szállodai beléptető rendszerek
Beltéri üvegfal rendszerek
Az üvegajtók és a falak átlátszó eleganciájú...
Ajtó vasalatok
Építész, építő vagy tervező - a dormakaba...
Vezérkulcsos zárrendszerek
A mechanikus zárás a legegyszerűbb és...
Elektronikus beléptetés és adatkezelés
Széles körű beléptetési és adatkezelési...
Széfzárak
Beléptető és bejárati rendszerek
A repterektől a lakóépületekig: A bejárati...
How we define innovation
Cutting-edge topics
Self service kiosk
In-room safes
Room energy savers
Access Media & Badges
Smart cities More
A smart step for smarter access
Try the new dormakaba 360° City application More
dormakaba announces preliminary key figures for the 2017/18 financial year and outlook
Published on: 19.07.2018 Rümlang
dormakaba today announced preliminary, unaudited key figures for the 2017/18 financial year. Sales and EBITDA increased, organic sales growth and the EBITDA margin however remained below expectations. The integration process has largely been completed in most countries. dormakaba will continue to consequently pursue its business strategy and, over the coming years, plans to further invest substantially in digitalization and innovation in order to strengthen its market position sustainably. The Group confirms its medium-term financial targets, which it now aims to reach at the latest in the 2020/21 financial year.
Preliminary, unaudited key figures for 2017/18
In the 2017/18 financial year, dormakaba increased consolidated sales by around 13% to approx. CHF 2.84 billion (previous year CHF 2.52 billion). As in the first six months, organic sales growth for the second half of 2017/18 rose only moderately. Organic sales growth for the full financial year was around 2.5%. Pleasing growth rates were achieved for Key & Wall Solutions and Access Solutions Asia-Pacific, where the integration has been completed, while in Germany and the US, the last financial year was still significantly impacted by the integration process. Overall, the integration is proceeding according to plan in almost all countries and was largely completed as foreseen. All of the acquisitions since the dormakaba merger have made a positive contribution to results.
On the cost side, further progress was achieved during the course of the integration. In Germany, however, part of the efficiency gains will only be achieved with a delay; this is mainly due to the socially acceptable measures relating to job reductions agreed to with the social partners. The relocation of the production for standard door closers from Germany to Singapore and China was completed as planned.
The operating profit (EBITDA) increased by around 10% (previous year CHF 387 million). At around 15.0%, the EBITDA margin was slightly below the previous year (15.4%). This in particular reflects the delay in the realization of cost synergies in Germany as well as the not yet fully effective revenue synergies from the combined product portfolio. Specifically, in Germany as well as the US, not all business opportunities were exploited, as the organization was more absorbed by the integration than expected. In the US, profitability was also adversely impacted in particular by the weak environment for ATM locks (Safe Locks) as well as by a declining services business.
Riet Cadonau, CEO of dormakaba: "The results for the 2017/18 financial year are not in line with our ambitious targets, but are solid in light of the progress made with regard to integration. Our company is very well positioned in the market for access and security solutions. We want to take advantage of this position to achieve further profitable growth."
In light of the results for the 2017/18 financial year, which are below expectations, and due to the delay of the integration particularly in Germany and the US, dormakaba is adjusting the timeline for achieving its medium-term financial targets. In line with its strategy, the company will continue to invest significantly in innovation as well as allocate substantial additional funds to its digital transformation in the coming years. Provided the business environment is stable, the company aims to achieve its targeted EBITDA margin of 18% at the latest by 2020/21 instead of the 2018/2019 financial year. Also by 2020/21, organic sales growth should be 200 basis points above the GDP growth in dormakaba's relevant markets.
For the 2018/19 financial year, dormakaba aims to substantially increase its investments in Information Technology to advance the digitalization of the company. In addition, with a view to strengthening innovation, the company aims to continue to invest around 4-5% of sales in research and development, which corresponds to over CHF 100 million. As a result, dormakaba expects an EBITDA margin in the range of 16.0% – 16.5% for the current financial year 2018/19. In terms of sales, the company expects to see organic growth in line with the previous year.
Ulrich Graf, Chairman of the Board of Directors of dormakaba: "The Board of Directors wants to further strengthen dormakaba with respect to innovation and digitalization through targeted investments, even if, in light of the results for the past financial year, this means that we will achieve our medium-term financial targets only at a later point in time. These investments are essential for sustainable business development, which will benefit our customers, shareholders and employees."
The complete, final and audited financial results for the 2017/18 financial year will be announced on
Download Media Release (PDF)
Media and Investor Information
A telephone conference will be held in German for media representatives from 8:00 to 8:30 am.
A telephone conference will be held in English for analysts and investors from 9:00 to 9:30 am.
The dial-in numbers for the conferences are as follows:
Switzerland/Europe +41 (0) 58 310 50 00
United Kingdom +44 (0) 207 107 06 13
USA +1 (1) 631 570 56 13
Speakers dormakaba Group: Riet Cadonau, CEO / Bernd Brinker, CFO
Please dial in ten minutes before the start of the conference.
Webcast of analysts and investors call
dormakaba Magyarország Zrt.
1044 Budapest, Óradna utca 3/b
F: +36 1 329 0692
info.hu@dormakaba.com

redpajama_set_name: RedPajamaCommonCrawl


text:
package org.jfree.chart.block.junit;

import java.awt.Color;
import java.awt.GradientPaint;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.jfree.chart.block.BlockBorder;
import org.jfree.ui.RectangleInsets;
import org.jfree.util.UnitType;

/**
 * Tests for the {@link BlockBorder} class.
 */
public class BlockBorderTests extends TestCase {

    /**
     * Returns the tests as a test suite.
     *
     * @return The test suite.
     */
    public static Test suite() {
        return new TestSuite(BlockBorderTests.class);
    }

    /**
     * Constructs a new set of tests.
     *
     * @param name  the name of the tests.
     */
    public BlockBorderTests(String name) {
        super(name);
    }

    /**
     * Confirm that the equals() method can distinguish all the required fields.
     */
    public void testEquals() {
        BlockBorder b1 = new BlockBorder(new RectangleInsets(1.0, 2.0, 3.0,
                4.0), Color.red);
        BlockBorder b2 = new BlockBorder(new RectangleInsets(1.0, 2.0, 3.0,
                4.0), Color.red);
        assertTrue(b1.equals(b2));
        assertTrue(b2.equals(b2));

        // insets
        b1 = new BlockBorder(new RectangleInsets(UnitType.RELATIVE, 1.0, 2.0,
                3.0, 4.0), Color.red);
        assertFalse(b1.equals(b2));
        b2 = new BlockBorder(new RectangleInsets(UnitType.RELATIVE, 1.0, 2.0,
                3.0, 4.0), Color.red);
        assertTrue(b1.equals(b2));

        // paint
        b1 = new BlockBorder(new RectangleInsets(1.0, 2.0, 3.0, 4.0),
                Color.blue);
        assertFalse(b1.equals(b2));
        b2 = new BlockBorder(new RectangleInsets(1.0, 2.0, 3.0, 4.0),
                Color.blue);
        assertTrue(b1.equals(b2));
    }

    /**
     * Immutable - cloning not necessary.
     */
    public void testCloning() {
        BlockBorder b1 = new BlockBorder();
        assertFalse(b1 instanceof Cloneable);
    }

    /**
     * Serialize an instance, restore it, and check for equality.
     */
    public void testSerialization() {
        BlockBorder b1 = new BlockBorder(new RectangleInsets(1.0, 2.0, 3.0,
                4.0), new GradientPaint(1.0f, 2.0f, Color.red, 3.0f, 4.0f,
                Color.yellow));
        BlockBorder b2 = null;
        try {
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            ObjectOutput out = new ObjectOutputStream(buffer);
            out.writeObject(b1);
            out.close();

            ObjectInput in = new ObjectInputStream(new ByteArrayInputStream(
                    buffer.toByteArray()));
            b2 = (BlockBorder) in.readObject();
            in.close();
        }
        catch (Exception e) {
            fail(e.toString());
        }
        assertTrue(b1.equals(b2));
    }

}

redpajama_set_name: RedPajamaGithub


text:
UTSA student launches nationwide campaign promoting self-love
SAN ANTONIO -- A San Antonio college student who struggles with an auto-immune disorder has launched a world-wide event to promote self-acceptance.
Author: Sharon Ko
Published: 10:57 AM CST February 13, 2017
Updated: 10:57 AM CST February 13, 2017
Sanah Jivani was diagnosed with alopecia areata when she was 3-years-old. It's a disorder where the immune system mistakenly attacks hair follicles and causes hair loss in patches on the scalp.
As Jivani got older, her condition worsened. She said when she was in the seventh grade, she woke up to discover most of her hair had fallen out.
"I woke up one morning and pretty much all of my hair was on my pillow. As a seventh grade girl, it was heartbreaking," Jivani said. "I felt like I couldn't look in the mirror. I couldn't even look at myself. I had so much self-hatred in my heart. I didn't want to go to school, I didn't want to face my friends or my family."
Jivani said dealing with her hair loss was harder with the cruel taunting from her peers. She said students created a Facebook page about her.
"Students would just post things, trying to guess why I was wearing the wig and in my heart, I was like if only they knew this was something I can't control," Jivani said. "I got notes in my locker: like 50 ways to go kill yourself. And I constantly asked myself. What did I do to deserve this?"
Jivani said the bullying was devastating and her loss of confidence had affected her school work. She said if she didn't get her grades up, she would have to repeat the eighth grade.
"I knew I had two choices. I could continue to go down a path of self-hatred or choose self-love," Jivani said.
She chose the latter and decided to leave her wig at home for the first day of high school.
"I just told myself, 15 seconds of absolutely insane courage and you can get through the door. I felt like my whole word opened up. I mean, it sounds silly but once I started to love myself, it's like the sun started shining. The birds started chirping again. It was just like I could really take in all the beauty that was in the world," Jivani said.
Jivani said her personal journey inspired her to empower other boys and girls.
She is the CEO of the 'Love Your Natural Self Foundation.' Her non-profit organization has various projects to promote self-acceptance, including 'International Natural Day' that takes place February 13.
"I chose the day, February 13, because it's the day before Valentine's Day," Jivani said. "You really have to love and care about yourself before you love and care about others."
The first, International Natural Day was held at her high school.
"We had people open up about the past abuse they have been through. They opened up about their parents getting a divorce. It showed me that insecurity comes in so many layers. It's not just physical. It can be something internal as well and everybody has something. Everybody has a wig. Something they're hiding," Jivani said.
Jivani plans to host an 'International Natural Day' event at her university, UTSA. The event will be Monday at the Harris room at the main campus from 7:30 p.m. to 9 p.m.
She will share her personal story and how she started her non-profit organization.
"I hope that this event at UTSA will be an example for college campuses all around the country to host an international day of self-love," Jivani said.
For more information on Jivani's foundation, you can visit http://www.internationalnaturalday.com/.


text:
#import "FBError.h"
#import "FBGraphUser.h"
#import "FBIntegrationTests.h"
#import "FBRequest.h"
#import "FBSession+Internal.h"
#import "FBSessionTokenCachingStrategy.h"
#import "FBInternalSettings.h"
#import "FBTestBlocker.h"
#import "FBTestSession.h"
#import "FBUtility.h"

#if defined(FACEBOOKSDK_SKIP_SESSION_TESTS)

#pragma message ("warning: Skipping FBSessionIntegrationTests")

#else

@interface FBRequestConnection (FBSessionIntegrationTests)
+ (void)addRequestToRefreshPermissionsSession:(FBSession *)session connection:(FBRequestConnection *)connection;
@end

#pragma mark - Test suite

@interface FBSessionIntegrationTests : FBIntegrationTests
@end

@implementation FBSessionIntegrationTests

- (void)testSessionBasic
{
    FBConditionalLog(NO, FBLoggingBehaviorInformational, @"Testing conditional %@", @"log");
    FBConditionalLog(NO, FBLoggingBehaviorInformational, @"Testing conditional log");
    FBConditionalLog(YES, FBLoggingBehaviorInformational, nil, @"Testing conditional log");

    // create valid
    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];

    FBTestSession *session = [FBTestSession sessionWithSharedUserWithPermissions:nil];
    [session openWithCompletionHandler:^(FBSession *innerSession, FBSessionState status, NSError *error) {
        [blocker signal];
    }];

    [blocker wait];

    XCTAssertTrue(session.isOpen, @"Session should be valid, and is not");

    FBRequest *request = [[[FBRequest alloc] initWithSession:session
                                                   graphPath:@"me"]
                          autorelease];
    [request startWithCompletionHandler:
     ^(FBRequestConnection *connection, id<FBGraphUser> me, NSError *error) {
         XCTAssertTrue(me.objectID.length > 0, @"user id should be non-empty");
         [blocker signal];
     }];

    [blocker wait];

    [session close];
}

- (void)testSessionInvalidate
{
    // create valid
    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];

    __block BOOL wasNotifiedOfInvalid = NO;
    FBTestSession *session = [FBTestSession sessionWithPrivateUserWithPermissions:nil];
    [session openWithCompletionHandler:^(FBSession *innerSession, FBSessionState status, NSError *error) {
        if (status == FBSessionStateClosed) {
            wasNotifiedOfInvalid = YES;
        }
        [blocker signal];
    }];
    [blocker wait];

    XCTAssertTrue(session.isOpen, @"Session should be open, and is not");

    __block NSString *userID = nil;
    FBRequest *request1 = [[[FBRequest alloc] initWithSession:session
                                                    graphPath:@"me"]
                           autorelease];
    [request1 startWithCompletionHandler:
     ^(FBRequestConnection *connection, id<FBGraphUser> me, NSError *error) {
         userID = [me.objectID retain];
         XCTAssertTrue(userID.length > 0, @"user id should be non-empty");
         [blocker signal];
     }];

    [blocker wait];

    // use FBRequest to create an NSURLRequest
    FBRequest *temp = [[FBRequest alloc] initWithSession:session
                                               graphPath:userID
                                              parameters:[NSDictionary dictionaryWithObjectsAndKeys:
                                                          @"delete", @"method",
                                                          nil]
                                              HTTPMethod:nil];
    FBRequestConnection *connection = [[FBRequestConnection alloc] init];
    [connection addRequest:temp completionHandler:nil];
    NSURLRequest *urlRequest = connection.urlRequest;
    [userID release];
    [connection release];
    [temp release];

    // synchronously delete the user
    NSURLResponse *response;
    NSError *error = nil;
    NSData *data;
    data = [NSURLConnection sendSynchronousRequest:urlRequest
                                 returningResponse:&response
                                             error:&error];
    // if !data or if data == false, log
    NSString *body = !data ? nil : [[[NSString alloc] initWithData:data
                                                          encoding:NSUTF8StringEncoding]
                                    autorelease];
    XCTAssertTrue([body isEqualToString:@"true"], @"body should return 'true'");

    FBRequest *request2 = [[[FBRequest alloc] initWithSession:session
                                                    graphPath:@"me"]
                           autorelease];
    [request2 startWithCompletionHandler:
     ^(FBRequestConnection *innerConnection, id<FBGraphUser> me, NSError *innerError) {
         XCTAssertTrue(innerError != nil, @"response should be an error due to deleted user");
         [blocker signal];
     }];

    XCTAssertFalse(wasNotifiedOfInvalid, @"should not have invalidated the token yet");
    [blocker wait];
    XCTAssertTrue(wasNotifiedOfInvalid, @"should have invalidated the token by now");

    [session close];
}

- (void)testSessionOpenFromAccessToken
{
    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];
    __block BOOL expectClosed = NO;

    // Open a test session normally for accesstoken/appid
    FBTestSession *normalSession = [FBTestSession sessionWithPrivateUserWithPermissions:nil];
    [normalSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
        XCTAssertTrue(session.state == FBSessionStateOpen || expectClosed, @"Expected open session: %@, %@", session, error);
        [blocker signal];
    }];
    [blocker wait];

    // Now construct the actual session under test (target) and open with the access token.
    // Note just hack in expiration time of 3600 for the test.
    FBSession *target = [[FBSession alloc] initWithAppID:normalSession.appID permissions:nil
                                         defaultAudience:FBSessionDefaultAudienceFriends
                                         urlSchemeSuffix:nil
                                      tokenCacheStrategy:[FBSessionTokenCachingStrategy nullCacheInstance]];

    FBAccessTokenData *tokenDataCopy = [normalSession.accessTokenData copy];
    BOOL openResult = [target openFromAccessTokenData:tokenDataCopy
                                    completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                        XCTAssertTrue(status == FBSessionStateOpen || expectClosed, @"status is :%d , error:%@:", status, error);
                                        [blocker signal];
                                    }];
    XCTAssertTrue(openResult, @"expected openResult=YES");
    [blocker wait];

    //final check, just do a request for me with the target
    FBRequest *request = [[[FBRequest alloc] initWithSession:target
                                                   graphPath:@"me"]
                          autorelease];
    [request startWithCompletionHandler:
     ^(FBRequestConnection *connection, id<FBGraphUser> me, NSError *error) {
         XCTAssertTrue(me.objectID.length > 0, @"user id should be non-empty. error:%@", error);
         [blocker signal];
     }];

    [blocker wait];

    expectClosed = YES;
    [target close];
    [normalSession close];
    [tokenDataCopy release];
    [target release];
}

- (void)testSessionOpenFromAccessTokenAlreadyOpen
{
    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];
    __block BOOL expectClosed = NO;

    // Open a test session normally for accesstoken/appid
    FBTestSession *target = [FBTestSession sessionWithPrivateUserWithPermissions:nil];
    [target openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
        XCTAssertTrue(session.state == FBSessionStateOpen || expectClosed, @"Expected open session: %@, %@", session, error);
        [blocker signal];
    }];
    [blocker wait];

    FBAccessTokenData *tokenDataCopy = [target.accessTokenData copy];

    //Now try to open it again
    XCTAssertThrowsSpecificNamed([target openFromAccessTokenData:tokenDataCopy
                                               completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                                   XCTFail(@"Completion handler was unexpectedly invoked for session: %@", session);
                                               }],
                                 NSException,
                                 FBInvalidOperationException);

    [tokenDataCopy release];
}

- (void)testSessionOpenWillRefreshPermissions
{
    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];
    __block BOOL expectClosed = NO;

    // Open a test session normally for accesstoken/appid
    FBTestSession *normalSession = [FBTestSession sessionWithPrivateUserWithPermissions:nil];
    [normalSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
        XCTAssertTrue(session.state == FBSessionStateOpen || expectClosed, @"Expected open session: %@, %@", session, error);
        [blocker signal];
    }];
    XCTAssertTrue([blocker waitWithTimeout:60], @"blocker timed out");
    XCTAssertTrue([normalSession shouldRefreshPermissions], @"expected need for permissions refresh");

    expectClosed = YES;
    [normalSession close];
}

- (void)testSessionOpenThenRefreshPermissions
{
    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];
    __block BOOL expectClosed = NO;

    // Open a test session normally for accesstoken/appid
    FBTestSession *normalSession = [FBTestSession sessionWithPrivateUserWithPermissions:nil];
    [normalSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
        XCTAssertTrue(session.state == FBSessionStateOpen || expectClosed, @"Expected open session: %@, %@", session, error);
        [blocker signal];
    }];
    XCTAssertTrue([blocker waitWithTimeout:60], @"blocker timed out");

    // Now ask for permissions refresh, and verify that the piggyback will not be added.
    id mockConnection = [OCMockObject niceMockForClass:[FBRequestConnection class]];
    [[mockConnection reject] addRequestToRefreshPermissionsSession:OCMOCK_ANY connection:OCMOCK_ANY];

    blocker = [[[FBTestBlocker alloc] init] autorelease];
    [normalSession refreshPermissionsWithCompletionHandler:^(FBSession *session, NSError *error) {
        XCTAssertNil(error, @"unexpected error refreshing permissions");
        [blocker signal];
    }];
    XCTAssertTrue([blocker waitWithTimeout:20], @"blocker timed out for permissions refresh");
    [mockConnection verify];

    expectClosed = YES;
    [normalSession close];
}

- (void)testSessionOpenFromAccessTokenWillRefreshPermissions
{
    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];
    __block BOOL expectClosed = NO;

    // Open a test session normally for accesstoken/appid
    FBTestSession *normalSession = [FBTestSession sessionWithPrivateUserWithPermissions:nil];
    [normalSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
        XCTAssertTrue(session.state == FBSessionStateOpen || expectClosed, @"Expected open session: %@, %@", session, error);
        [blocker signal];
    }];
    XCTAssertTrue([blocker waitWithTimeout:60], @"blocker timed out");

    // Now construct the actual session under test (target) and open with the access token.
    // Note just hack in expiration time of 3600 for the test.
    FBSession *target = [[FBSession alloc] initWithAppID:normalSession.appID permissions:nil
                                         defaultAudience:FBSessionDefaultAudienceFriends
                                         urlSchemeSuffix:nil
                                      tokenCacheStrategy:[FBSessionTokenCachingStrategy nullCacheInstance]];

    FBAccessTokenData *tokenDataCopy = [normalSession.accessTokenData copy];
    BOOL openResult = [target openFromAccessTokenData:tokenDataCopy
                                    completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                        XCTAssertTrue(status == FBSessionStateOpen || expectClosed, @"status is :%d , error:%@:", status, error);
                                        [blocker signal];
                                    }];
    XCTAssertTrue(openResult, @"expected openResult=YES");
    XCTAssertTrue([blocker waitWithTimeout:10], @"blocker timed out");

    // Check the refresh permissions state
    XCTAssertTrue([target shouldRefreshPermissions], @"expected need for permissions refresh");

    //now do a request for me with the target which will refresh the permissions
    FBRequest *request = [[[FBRequest alloc] initWithSession:target
                                                   graphPath:@"me"]
                          autorelease];
    [request startWithCompletionHandler:
     ^(FBRequestConnection *connection, id<FBGraphUser> me, NSError *error) {
         XCTAssertTrue(me.objectID.length > 0, @"user id should be non-empty. error:%@", error);
         [blocker signal];
     }];

    XCTAssertTrue([blocker waitWithTimeout:30], @"blocker timed out requesting me");

    // now make sure the refresh permissions is satisfied.
    XCTAssertFalse([target shouldRefreshPermissions], @"did NOT expect need for permissions refresh");

    expectClosed = YES;
    [target close];
    [normalSession close];
}

- (void)testSessionOpenFromTokenAndCheckUserID
{
    FBConditionalLog(NO, FBLoggingBehaviorInformational, @"Testing conditional %@", @"log");
    FBConditionalLog(NO, FBLoggingBehaviorInformational, @"Testing conditional log");
    FBConditionalLog(YES, FBLoggingBehaviorInformational, nil, @"Testing conditional log");

    FBTestBlocker *blocker = [[[FBTestBlocker alloc] init] autorelease];

    // Open a test session normally for accesstoken/appid
    FBTestSession *normalSession = [FBTestSession sessionWithPrivateUserWithPermissions:nil];
    [normalSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
        if (status == FBSessionStateOpen) {
            [blocker signal];
        }
    }];
    XCTAssertTrue([blocker waitWithTimeout:10], @"blocker timed out");

    FBTestSession *session = [FBTestSession sessionWithSharedUserWithPermissions:nil];
    FBAccessTokenData *token = [FBAccessTokenData createTokenFromString:normalSession.accessTokenData.accessToken
                                                            permissions:nil
                                                    declinedPermissions:nil
                                                         expirationDate:[NSDate distantFuture]
                                                              loginType:FBSessionLoginTypeFacebookApplication
                                                            refreshDate:[NSDate dateWithTimeIntervalSince1970:0]
                                                 permissionsRefreshDate:nil
                                                                  appID:session.appID
                                                                 userID:@"4"];

    [session openFromAccessTokenData:token completionHandler:^(FBSession *session3, FBSessionState status, NSError *error) {
        if (status == FBSessionStateOpen) {
            assertThat(session.accessTokenData.userID, equalTo(@"4"));
            [blocker signal];
        }
    }];

    [blocker waitWithTimeout:10];

    XCTAssertTrue(session.isOpen, @"Session should be valid, and is not");

    [session requestNewPublishPermissions:@[@"publish_actions"] defaultAudience:FBSessionDefaultAudienceOnlyMe completionHandler:^(FBSession *session2, NSError *error) {
        assertThat(session.accessTokenData.userID, equalTo(@"4"));
        [blocker signal];
    }];
    [blocker waitWithTimeout:10];

    assertThat(session.accessTokenData.userID, equalTo(@"4"));
    [session close];
}

@end

#endif


text:
namespace KojtoCAD.GraphicItems.SheetProfile
{
  partial class SheetDescriptionForm
  {
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
      if (disposing && (components != null))
      {
        components.Dispose();
      }
      base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
            this.dataGridViewMaterials = new System.Windows.Forms.DataGridView();
            this.textBoxThickness = new System.Windows.Forms.TextBox();
            this.labelThickness = new System.Windows.Forms.Label();
            this.comboBoxCoatingColor = new colorComboboxControl.ColorComboBox();
            this.labelCoatingColor = new System.Windows.Forms.Label();
            this.labelCoatingLayer = new System.Windows.Forms.Label();
            this.comboBoxCoatingLayer = new System.Windows.Forms.ComboBox();
            this.checkBoxDrawCoating = new System.Windows.Forms.CheckBox();
            this.groupBoxCoating = new System.Windows.Forms.GroupBox();
            this.radioButtonCoatingRight = new System.Windows.Forms.RadioButton();
            this.radioButtonCoatingBoth = new System.Windows.Forms.RadioButton();
            this.radioButtonCoatingLeft = new System.Windows.Forms.RadioButton();
            this.buttonCancel = new System.Windows.Forms.Button();
            this.buttonOK = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridViewMaterials)).BeginInit();
            this.groupBoxCoating.SuspendLayout();
            this.SuspendLayout();
            //
            // dataGridViewMaterials
            //
            this.dataGridViewMaterials.AllowUserToOrderColumns = true;
            this.dataGridViewMaterials.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
            this.dataGridViewMaterials.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
            this.dataGridViewMaterials.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridViewMaterials.Location = new System.Drawing.Point(0, 12);
            this.dataGridViewMaterials.Name = "dataGridViewMaterials";
            this.dataGridViewMaterials.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.dataGridViewMaterials.Size = new System.Drawing.Size(248, 157);
            this.dataGridViewMaterials.TabIndex = 0;
            this.dataGridViewMaterials.SelectionChanged += new System.EventHandler(this.dataGridViewMaterials_SelectionChanged);
            //
            // textBoxThickness
            //
            this.textBoxThickness.Enabled = false;
            this.textBoxThickness.Location = new System.Drawing.Point(127, 191);
            this.textBoxThickness.Name = "textBoxThickness";
            this.textBoxThickness.Size = new System.Drawing.Size(100, 20);
            this.textBoxThickness.TabIndex = 1;
            //
            // labelThickness
            //
            this.labelThickness.AutoSize = true;
            this.labelThickness.Location = new System.Drawing.Point(13, 194);
            this.labelThickness.Name = "labelThickness";
            this.labelThickness.Size = new System.Drawing.Size(83, 13);
            this.labelThickness.TabIndex = 2;
            this.labelThickness.Text = "Sheet thickness";
            //
            // comboBoxCoatingColor
            //
            this.comboBoxCoatingColor.FormattingEnabled = true;
            this.comboBoxCoatingColor.Location = new System.Drawing.Point(118, 315);
            this.comboBoxCoatingColor.Name = "comboBoxCoatingColor";
            this.comboBoxCoatingColor.Size = new System.Drawing.Size(109, 21);
            this.comboBoxCoatingColor.SortAlphabetically = true;
            this.comboBoxCoatingColor.TabIndex = 63;
            this.comboBoxCoatingColor.SelectedIndexChanged += new System.EventHandler(this.comboBoxCoatingColor_SelectedIndexChanged);
            //
            // labelCoatingColor
            //
            this.labelCoatingColor.AutoSize = true;
            this.labelCoatingColor.Location = new System.Drawing.Point(9, 318);
            this.labelCoatingColor.Name = "labelCoatingColor";
            this.labelCoatingColor.Size = new System.Drawing.Size(88, 13);
            this.labelCoatingColor.TabIndex = 62;
            this.labelCoatingColor.Text = "Coating line color";
            //
            // labelCoatingLayer
            //
            this.labelCoatingLayer.AutoSize = true;
            this.labelCoatingLayer.Location = new System.Drawing.Point(9, 291);
            this.labelCoatingLayer.Name = "labelCoatingLayer";
            this.labelCoatingLayer.Size = new System.Drawing.Size(87, 13);
            this.labelCoatingLayer.TabIndex = 61;
            this.labelCoatingLayer.Text = "Coating line layer";
            //
            // comboBoxCoatingLayer
            //
            this.comboBoxCoatingLayer.FormattingEnabled = true;
            this.comboBoxCoatingLayer.Location = new System.Drawing.Point(118, 291);
            this.comboBoxCoatingLayer.Name = "comboBoxCoatingLayer";
            this.comboBoxCoatingLayer.Size = new System.Drawing.Size(109, 21);
            this.comboBoxCoatingLayer.TabIndex = 60;
            this.comboBoxCoatingLayer.SelectedIndexChanged += new System.EventHandler(this.comboBoxCoatingLayer_SelectedIndexChanged);
            //
            // checkBoxDrawCoating
            //
            this.checkBoxDrawCoating.AutoSize = true;
            this.checkBoxDrawCoating.Location = new System.Drawing.Point(12, 217);
            this.checkBoxDrawCoating.Name = "checkBoxDrawCoating";
            this.checkBoxDrawCoating.Size = new System.Drawing.Size(102, 17);
            this.checkBoxDrawCoating.TabIndex = 59;
            this.checkBoxDrawCoating.Text = "Add coating line";
            this.checkBoxDrawCoating.UseVisualStyleBackColor = true;
            this.checkBoxDrawCoating.CheckedChanged += new System.EventHandler(this.checkBoxDrawCoating_CheckedChanged);
            //
            // groupBoxCoating
            //
            this.groupBoxCoating.Controls.Add(this.radioButtonCoatingRight);
            this.groupBoxCoating.Controls.Add(this.radioButtonCoatingBoth);
            this.groupBoxCoating.Controls.Add(this.radioButtonCoatingLeft);
            this.groupBoxCoating.Location = new System.Drawing.Point(12, 238);
            this.groupBoxCoating.Name = "groupBoxCoating";
            this.groupBoxCoating.Size = new System.Drawing.Size(215, 46);
            this.groupBoxCoating.TabIndex = 58;
            this.groupBoxCoating.TabStop = false;
            this.groupBoxCoating.Text = "Location";
            //
            // radioButtonCoatingRight
            //
            this.radioButtonCoatingRight.AutoSize = true;
            this.radioButtonCoatingRight.Location = new System.Drawing.Point(156, 19);
            this.radioButtonCoatingRight.Name = "radioButtonCoatingRight";
            this.radioButtonCoatingRight.Size = new System.Drawing.Size(50, 17);
            this.radioButtonCoatingRight.TabIndex = 38;
            this.radioButtonCoatingRight.TabStop = true;
            this.radioButtonCoatingRight.Text = "Right";
            this.radioButtonCoatingRight.UseVisualStyleBackColor = true;
            this.radioButtonCoatingRight.CheckedChanged += new System.EventHandler(this.radioButtonCoatingRight_CheckedChanged);
            //
            // radioButtonCoatingBoth
            //
            this.radioButtonCoatingBoth.AutoSize = true;
            this.radioButtonCoatingBoth.Location = new System.Drawing.Point(80, 19);
            this.radioButtonCoatingBoth.Name = "radioButtonCoatingBoth";
            this.radioButtonCoatingBoth.Size = new System.Drawing.Size(47, 17);
            this.radioButtonCoatingBoth.TabIndex = 37;
            this.radioButtonCoatingBoth.TabStop = true;
            this.radioButtonCoatingBoth.Text = "Both";
            this.radioButtonCoatingBoth.UseVisualStyleBackColor = true;
            this.radioButtonCoatingBoth.CheckedChanged += new System.EventHandler(this.radioButtonCoatingBoth_CheckedChanged);
            //
            // radioButtonCoatingLeft
            //
            this.radioButtonCoatingLeft.AutoSize = true;
            this.radioButtonCoatingLeft.Location = new System.Drawing.Point(7, 19);
            this.radioButtonCoatingLeft.Name = "radioButtonCoatingLeft";
            this.radioButtonCoatingLeft.Size = new System.Drawing.Size(43, 17);
            this.radioButtonCoatingLeft.TabIndex = 36;
            this.radioButtonCoatingLeft.TabStop = true;
            this.radioButtonCoatingLeft.Text = "Left";
            this.radioButtonCoatingLeft.UseVisualStyleBackColor = true;
            this.radioButtonCoatingLeft.CheckedChanged += new System.EventHandler(this.radioButtonCoatingLeft_CheckedChanged);
            //
            // buttonCancel
            //
            this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.buttonCancel.Location = new System.Drawing.Point(134, 354);
            this.buttonCancel.Name = "buttonCancel";
            this.buttonCancel.Size = new System.Drawing.Size(90, 30);
            this.buttonCancel.TabIndex = 65;
            this.buttonCancel.Text = "Cancel";
            this.buttonCancel.UseVisualStyleBackColor = true;
            this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click);
            //
            // buttonOK
            //
            this.buttonOK.Location = new System.Drawing.Point(7, 354);
            this.buttonOK.Name = "buttonOK";
            this.buttonOK.Size = new System.Drawing.Size(90, 30);
            this.buttonOK.TabIndex = 64;
            this.buttonOK.Text = "OK";
            this.buttonOK.UseVisualStyleBackColor = true;
            this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click);
            //
            // SheetDescriptionForm
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(249, 393);
            this.Controls.Add(this.buttonCancel);
            this.Controls.Add(this.buttonOK);
            this.Controls.Add(this.comboBoxCoatingColor);
            this.Controls.Add(this.labelCoatingColor);
            this.Controls.Add(this.labelCoatingLayer);
            this.Controls.Add(this.comboBoxCoatingLayer);
            this.Controls.Add(this.checkBoxDrawCoating);
            this.Controls.Add(this.groupBoxCoating);
            this.Controls.Add(this.labelThickness);
            this.Controls.Add(this.textBoxThickness);
            this.Controls.Add(this.dataGridViewMaterials);
            this.KeyPreview = true;
            this.Name = "SheetDescriptionForm";
            this.Text = "Sheet Description";
            this.Load += new System.EventHandler(this.SheetDescriptionForm_Load);
            this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.SheetDescriptionForm_KeyPress);
            ((System.ComponentModel.ISupportInitialize)(this.dataGridViewMaterials)).EndInit();
            this.groupBoxCoating.ResumeLayout(false);
            this.groupBoxCoating.PerformLayout();
            this.ResumeLayout(false);
            this.PerformLayout();

    }

    #endregion

    private System.Windows.Forms.DataGridView dataGridViewMaterials;
    private System.Windows.Forms.TextBox textBoxThickness;
    private System.Windows.Forms.Label labelThickness;
    private colorComboboxControl.ColorComboBox comboBoxCoatingColor;
    private System.Windows.Forms.Label labelCoatingColor;
    private System.Windows.Forms.Label labelCoatingLayer;
    private System.Windows.Forms.ComboBox comboBoxCoatingLayer;
    private System.Windows.Forms.CheckBox checkBoxDrawCoating;
    private System.Windows.Forms.GroupBox groupBoxCoating;
    private System.Windows.Forms.RadioButton radioButtonCoatingRight;
    private System.Windows.Forms.RadioButton radioButtonCoatingBoth;
    private System.Windows.Forms.RadioButton radioButtonCoatingLeft;
    private System.Windows.Forms.Button buttonCancel;
    private System.Windows.Forms.Button buttonOK;
  }
}


text:
WSKG (https://wskg.org/npr_story_post/ex-white-house-economist-alan-krueger-dies-saw-lessons-for-economy-in-rock-music/)
Ex-White House Economist Alan Krueger Dies; Saw Lessons For Economy In Rock Music
By NPR News | March 18, 2019
Alan Krueger, a Princeton University economist and chairman of former President Barack Obama's Council of Economic Advisers, specialized in workforce economics.
Alan Krueger, who chaired the White House Council of Economic Advisers under former President Barack Obama, has died. He was 58.
The death was announced Monday by Princeton University, where Krueger was a professor.
"Alan was recognized as a true leader in his field, known and admired for both his research and teaching," the school said in a statement.
Krueger, who also served as an economist in the Labor and Treasury departments, specialized in workforce economics. He conducted influential research on the opioid epidemic and showed that raising the minimum wage need not cost jobs. His research on the value of an elite college degree was being cited last week in connection with the admissions fraud scandal.
Krueger also was a music fan who researched the increasingly winner-take-all economics in the entertainment industry — work that was featured in a speech he gave at the Rock & Roll Hall of Fame in Cleveland.


Stress. It can be just like the Grinch, swooping in to steal your happy holiday.
So, as the holidays come into full swing with their bright lights, marathon shopping trips, and holiday gatherings- keep these helpful tips in mind.
When you are pressed for time + surrounded by delicious holiday treats, it's super easy to slip into a pattern of eating on the run, not to mention eating just for fun!
Make an effort to fill your body with good-for-you food, and your body will respond by supplying you with the calm sustained energy you need to tackle your holiday season with ease.
For success plan and prepare your healthy options ahead of time. That way you'll have them handy for meals and snacking at the exact moment you need them.
Now that you have a fueling station filled with good-for-you food, go ahead and enjoy some holiday goodies too. Be selective, choose your favorites and do so in moderation to avoid sugar induced highs and lows.
Be sure to enjoy every treat to the fullest. No guilt. Just love.
If your to-do list has become as long as Santa's world wide naughty and nice data base, you may be tempted to run longer, stronger, and faster in an effort to try to get it all done. Don't.
Make rest a priority. When you give your body the rest it requires (and maybe even a little more) it will pay you back in full with a clearer, sharper mind, and the feel good hormones of a super hero.
Go to bed on time + give yourself a boost for better sleep with an aromatherapy bath or some sleepy-time yoga moves.
You might notice your breath is shallow- as if you're barely breathing, or your breath may be uneven or unsteady.
Disrupted breathing tells your body that something is wrong and sets off the danger Will Robinson alarm, causing more stress.
On the other hand, breathing that is smooth and flowing tells your body that all is well and activates calming responses that help you feel relaxed and content.
Give stress a hefty kick in the pants by taking just one minute to connect with your breath. It's like pushing the reset button on your computer, wiping away stress and letting you start again refreshed and ready to go.
Just keep breathing. Everything will be okay.
Stress builds up in your system. Think about the pressure that builds up in a volcano before it blows, and imagine having that kind of pressure in your body. Perhaps you should let off a little steam?
Heading out for a quick walk, dancing around the house, or hitting the treadmill for a run is a great way to release the stress that builds up in your body.
Stress is also really good at creating tension in your body. In return, tension causes more stress. Can you see where I'm going with this?
Tight muscles really appreciate a little love and attention. Gentle movement, stretching, or yoga will do wonders for how your body feels, and when your body feels better, you feel better. Yup.
You don't need to carve out a whole lotta time to move. When you're really busy a little movement goes a long way. Try to work in several 5, 10, or 15 minute movement brakes into your day.
Don't forget to crank those holiday tunes. They will make moving much more fun.
The holidays not only bulk up your personal and family to-do list, they also provide many opportunities to help others. You may get asked to help with holiday projects, events, and parties. Helping others rocks for sure, however… there is only so much you can do in a day.
When you feel tempted to take on more, and more, and then possibly some more… think it through first.
-Do you have the time in your schedule to take on this new task?
-Do you have the energy + mental and emotional oomph to handle it?
-Is this somewhere that you really want to spend your time, or are you just saying yes to be nice?
This tip isn't just about helping others with their stuff. It also applies to how you decorate your home, prepare holiday meals, and do your shopping.
Be selective in how you choose to spend your time. Don't overload your schedule with mundane tasks, instead make clear choices to do the things that are meaningful to you.
Take extra good care of yourself, and enjoy every minute of the holiday season.
Any holiday survival tips you'd like to share? Go for it!


text:
Join us for monthly updates!
La Brega
A Futuro Media Property
A Futuro Media
From Boyle Heights To Netflix… And Back To The Neighborhood
By Janice Llamoca Mar 20, 2020
In February, a series centered around a Mexican-American family that lives in the Los Angeles neighborhood of Boyle Heights, premiered on Netflix. The show zooms in on the lives of three cousins and their grandfather, who together struggle to keep their family restaurant afloat in the midst of a changing economy.
The show is called Gentefied and it's the blend of two words: "gente", the Spanish word for people, and "gentrified."
The term "gentefication" was coined in Boyle Heights. It's a form of gentrification by Latinos—specifically upwardly mobile members of the community who return to their old neighborhoods, often with the idea of investing time and money in them. While this form of gentrification is complicated, it too can lead to displacement.
Gentefied isn't the first show to tackle this issue. The Starz show Vida, which premieres its third and final season in May, also tackles gentrification and is also set in Boyle Heights. While the shows help fill a much-needed void in the representation of Latinos in media, some residents have mixed feelings about both series.
To get a community perspective, Latino USA reached out to the Boyle Heights Beat, a bilingual community newspaper produced by youth reporters, and handed them the mic.
L to R: Boyle Heights Beat reporters Andy García, Noemí Pedraza and Olivia Teforlack at Marketplace studios in Downtown Los Angeles. (Courtesy of Boyle Heights Beats)
Since 2010, the Boyle Heights Beat has kept its finger on the pulse of the neighborhood, reporting on everything from local politics to providing the latest COVID-19 updates to their community. And of course, they had their own take on the show—Gentefied.
In this conversation, you'll hear from high school seniors and Boyle Heights Beat reporters Andy García, Noemí Pedraza and Olivia Teforlack and the moderator for today, Boyle Heights Beat alum Carmen Gonzalez.
Featured image via Netflix.
Portrait Of: Tanya Saracho Gives Us 'Vida'
This Web Series Spotlights How Gentrification Impacts Latinx Communities
Documentary 'Decade of Fire' Uncovers the Story of Why the South Bronx Burned in the 70s
One thought on "From Boyle Heights To Netflix… And Back To The Neighborhood"
alis927 says:
I just want to say how proud I was to hear these amazing journalists discuss this show. I wish I could've been this thoughtful as a high schooler and even as an adult. I am excited about the incredible work they will continue to do to represent our communities, provide a voice, and change the world.
Digging Into 'American Dirt'
One of the Fathers of Black History Was Afro-Puerto Rican
Central American Gangs, Made in LA
© Copyright 2023 Futuro Media Group.
Futuro Media
In The Thick
Futuro Studios


text:
Nikola CEO: GM is helping us drive down cost
(CNN) Mercedes-Benz's parent company, Daimler AG, has agreed to pay $1.5 billion in penalties and settlements to US and California state regulators in order to resolve allegations that its vehicles were rigged to cheat on diesel emissions tests.
"This is the second largest civil penalty under the Clean Air Act on per vehicle basis. This penalty is larger than both the 2017 Volkswagen penalty and the 2019 Fiat Chrysler penalty," EPA administrator Andrew Wheeler said.
Engineers at the Environmental Protection Agency said they had found that the software in Daimler's (DMLRY) vehicles included software designed to cheat on emission tests.
The company agreed to an $875 million settlement with the EPA, the Department of Justice and the California Air Resources Board. As part of the agreement, Daimler will be required to fix the more than 250,000 diesel-powered vans and passenger vehicles that it manufactured, imported and sold between 2009 and 2016 in order to bring them into legal compliance, and to mitigate the effects on the environment of the excess emissions the software allowed.
The total cost of the settlement is estimated by the agencies and Daimler to be about $1.5 billion.
"The company has fully cooperated with the U.S. authorities. Daimler has not received a Notice of Violation (NOV) from the EPA or the CARB during this process," the company said in a statement.
Separately, lawyers representing plaintiffs in a class action lawsuit against Daimler for allegedly cheating on diesel emissions test announced details of a $700 million settlement with the automaker.
Despite the settlement, Daimler denies any wrongdoing.
"As stated in the consent decrees and the class action settlement, the company denies the authorities' allegations as well as the class action plaintiffs' claims and does not admit any liability to the United States, California, plaintiffs, or otherwise," the company said.
Diesel engines are more fuel-efficient than gasoline engines, but they tend to release more dangerous emissions that can have adverse health effects.
"Long-term, if you cheat, you're going to get caught. Daimler is finding that out today. But they're not the first — nor likely the last — to try," California Attorney General Xavier Becerra said in a statement.
Sergei Rakhlin Dies: Longtime HFPA Member & Screenwriter Was 78
ONGC walks away with all 7 oil, gas blocks on offer
Biotech Stocks Facing FDA Decision In May 2019
Manager of McDonald's franchise in Peru says faulty drinks machine caused deaths
Opinions Grow That Trade War Will Hit US Growth
Previous Post: Iran's crypto mines could be used to help fund car imports
Next Post: Peter Brandt says he's not picking crypto right now, in terms of opportunity
Nvidia Expects Crypto-Mining Slump
Brit businessman, 60, dies in 65ft fall from Bangkok motorway flyover after coronavirus decimated his business
Judge Rejects Michael Flynn's Claims in His Attacks on Prosecutors
British PM Johnson faces tough Brexit lunch with Macron
KuCoin Token (KCS) Review: Is It Ready for the Future?
Nueva Pescanova To Use IBM Blockchain For Traceability Of Seafood Products
Bitcoin Continues Rally for Third Week in a Row, Eyeing the $10,000 Mark: Week in Review May 1


Chinese stocks extended seven-year high on Monday, with the benchmark Shanghai index up nearly 3.4 percent, [Company Registration in USA]amid speculation that cross-border sales of mutual funds will fuel the market.
The Shanghai Composite Index surged 156.2 points to close at 4,813.8, while the Shenzhen Component Index advanced 1.9 percent to 16,351.06.
Construction and infrastructure-themed stocks led the gain, as the industry measure jumped more than 5 percent. Aviation material developer AVIC Sanxin Co, Zhongtai Bridge Co and smart city solution provider Shenhua Smart Tech rallied by the daily limit of 10 percent.
Highway constructors and operators including Jinlin Expressway, Sichuan Expressway Company, and Jiangxi Ganyue Expressway Co jumped by the daily limit.
Military industrial companies also led the gain, with stocks such as AVIC Aircraft and China Spacesat Co soaring by 10 percent.
Stock turnovers at the two bourses reached 2.03 trillion yuan ($326.5 billion) on Monday.
China Securities Regulatory Commission announced the long-awaited mutual fund recognition plan on Friday, promoting opening up of the country's capital markets.
According to the announcement, the cross-border sales of mutual funds between the Chinese mainland and Hong Kong will start on July 1, with an initial quota of 300 billion yuan in each direction.
About 100 Hong Kong-based and 850 mainland-based funds will qualify the mutual recognition standards, where funds need to have been established for at least one year and have at least 200 million yuan in assets.
The CSI 300, a main gauge for largest stocks in Shanghai and Shenzhen, soared 3 percent to 5,099.5 on Monday.
Investors has been riding on an "inclusive" bull market, as 99.5 percent of stocks rose in the first four months this year, with only 14 out of 2,547 recording a decline.
Investors in Shanghai scored the highest gains, with an average of 156,400 yuan ($25,143), followed by Beijing investors whose profits averaged 80,200 yuan, reported Beijing Youth Daily on Monday citing data from RoyalFlush Information.
Investors nationwide on average gained about 14,000 yuan from January to April, according to the data, as the benchmark Shanghai index surged 37 percent in the same period.
The ChiNext Index, which tracks China's Nasdaq-style board of growth enterprises, has soared 140 percent since the beginning of the year.
Of the 2,547 stocks, [HK Corporate Registration] 397 saw their share price double, and 1,163 rallied more than 50 percent, according to RoyalFlush Information.
The market sentiment remains bullish, as a gauge on investors' confidence rose 26.5 percent year-on-year to 65.2 in April, despite a decline from 70.5 in March, a polling by Administration of Securities Investor Protection Funds showed. The reading has stayed above 50 for 11 consecutive months.


text:
DallasFall SportsFeatured PostsGolf
Paczewski's eagle launched rally
ROARING BROOK TWP. – Dallas made the turn in the District 2 Class 3A Boys Team Golf Championship match in a precarious position.
The Mountaineers faced a 13-stroke deficit against North Pocono at Elmhurst Country Club, the Trojans' home course.
The first shot of the back nine did not exactly give an indication of what was ahead.
The next two started an improbable turnaround that made Dallas the district champion.
Playing in the lead group, Logan Paczewski got his usual distance off the 10th tee at Elmhurst but drove the ball into the rough.
"I hit a really poor drive on 10," Paczewski said.
The result, however, was not terrible. Paczewski had 170 yards in from the light rough on the left side and his 7-iron from there skipped up on to the green, settling 10 feet away.
Paczewski instantly erased his personal three-stroke deficit to North Pocono No. 1 player and 2020 District 2 Class 3A champion Billy Pabst Jr. when Pabst bogeyed the hole and Paczewski drained his eagle putt.
"I got back to all square and I said, 'alright, I'm in it'," Paczewski said.
So were the Mountaineers.
Paczewski's 5-under-par, 31 on the back nine and 67 total led a 331-332 victory in the district championship match. Those scores also made him the Center City Print District 2 Athlete of the Week for the period of Sept. 27-Oct. 3.
The Dallas senior has since added his second District 2 Class 3A boys team title in three years and finished as medalist when Dallas routed Selinsgrove, 324-384, for the District 2-4 Class 3A Subregional title. Both accomplishments land him at Pennsylvania Interscholastic Athletic Association state championship events.
Logan Paczewski at 11 years old in 2015, the year he began competing with top high school players.
Paczewski is familiar with big-time events.
His exhaustive golf resume goes back to finishing fourth and ninth in the 7-and-under division, then 8-and-under division at the U.S. Kids World Championships in 2011 and 2012. By the time he was 9, Paczewski was dominating the Anthacite Golf Association Bill Lawler Junior Tour's Division II for players 11-14-years old. As an 11-year-old still playing Little League Baseball, Paczewski beat the area's top high school players, winning a tournament title in just his second tournament after a decision to move him up to play with 15-18-year-olds in the AGA.
More recently, Paczewski was the second alternate for this year's U.S. Amateur after missing the field by one stroke. The Rutgers University commit made the U.S. Junior Amateur and finished sixth in an American Junior Golf Association Tour event.
The years of dedication built a game that reached extreme levels of success when his team needed it most.
Following his eagle, Paczewski added birdies at 13, 15 and 17 and parred the other five back-nine holes.
Despite the toughest draw of the day, Paczewski went from three strokes down to three strokes ahead when the first 18-hole totals went up on the scoreboard.
"He just zoned in on the back and that really helped to provide a nice cushion," Mountaineers coach Jane Kilduff-Molino said.
Paczewski hit every green in regulation in the entire round, but there was something different about the back nine.
"I hit the ball awesome today and putted pretty well, but I definitely made more of the key putts on the back nine that I missed on the front," Paczewski, a two-time district individual champion and two-time runner-up, said in a post-match interview.
Paczewski spent less time comparing scores than some other players in the match. The one thing he understood his team need was the best score he could produce.
"I didn't really peek at the scores," he said. "It doesn't really matter to me. I just want to go out there and play my own game.
"I was just thinking I have to keep making putts and hopefully it will be a good turnout for the team."
Logan is the son of Eric and Jen Paczewski from Dallas.
CENTER CITY PRINT DISTRICT 2 ATHLETE OF THE WEEK
Sept. 20-26: Emma Watchilla, Wyoming Seminary field hockey. https://nepasportsnation.com/virginia-commit-has-sem-rolling/.
Sept. 13-19: Krista Jones, Elk Lake girls cross country. https://nepasportsnation.com/jones-runs-alternate-paths-to-success/.
Sept. 6-12: Ron Prislupski, Holy Cross boys soccer. https://nepasportsnation.com/prislupski-doubles-up-on-hat-tricks/.
Aug. 30-Sept. 5: London Montgomery, Scranton Prep football. https://nepasportsnation.com/montgomery-sprints-to-award/.
Aug. 19-29: Chloe Sipe, Elk Lake girls golf. https://nepasportsnation.com/preparation-paid-off-for-sipe/.
Center City Print District 2 Athlete of the Week Logan Paczewski
GIRLS VOLLEYBALL ROUNDUP: Romanowski sets school record
North Pocono boys take over No. 1


text:
Alumni & Student Creations
In addition to publishing their own work and teaching, our alumni and students are creating opportunities for writers. Goddard alumni have founded and are running their own literary journals, and have created community through writing groups, conferences and retreats. Goddard students run their own literary magazine as well.
Here is a list in process of some of these offerings. Submit. Get in touch. Get together.
Journals and Literary Magazines
Animal: A Beast of a Literary Magazine is an online lit mag where artists of word and image explore the ephemeral boundary between human and animal. Each month we publish one story, one poem, and one essay that teeter on the divide between wild and domestic. We create a space where readers, viewers, writers, and artists expand the human experience by engaging their imagination with other creatures. Submission guidelines here.
Founding Editor, Danita Berg, and Fiction Editor, Sarah Cedeno are Goddard alumnae.
Clockhouse is a national literary journal published in partnership with Goddard College by the Clockhouse Writers' Conference, the alumni association of Goddard's MFA in Creative Writing Program. Our mission statement:
Dare. Risk. Dream. Share. Ruminate.
How do we understand our place in the world, our responsibility to it, and our responsibility to each other? Clockhouse is an eclectic conversation about the work-in-progress of life—a soul arousal, a testing ground, a new community, a call for change. Join in.
Submission guidelines can be found at our submissions page.
Empty City Press (est. 2007) is dedicated to literature that challenges and responds to the culture that surrounds it; our work is our lives, and we can ask nothing less of it. Dedicated to the proliferation of Speculative and Alternative Literary Fiction, Poetry, and radical Non-Fiction, the press utilizes a strict DIY/Punk model that places considerable power in the hands of producers (that is, writers, artists, and musicians), so that every book published is a fully collaborative experience between authors and the press--from design to fulfillment, from readings to special editions. Empty City Press is led by Goddard alumnus, Keith Backhaus, and works primarily with book-length manuscripts, though the second volume of our semi-annual anthology The Grey Alley will be open for submissions in summer 2016. For more information about the press, their books, and submissions, please visit their website.
Hummingbird Press was founded by Phyllis Walsh in 1990 with strong encouragement from her friend, and fellow poet, Cid Corman.
Based in Madison, WI and Seattle, WA, the press publishes Hummingbird: Magazine of the Short Poem in the spring and the fall. Submissions of original, unpublished short poems are invited (book-length manuscripts are read by solicitation only).
We're looking for work that expands our understanding of the short poem and poetically shorts our understanding of expansion. Associate Editor, Drew Dillhunt is a Goddard alumnus. Contact: editors@hummingbirdpoetry.org
Minerva Rising is an independent literary journal celebrating the creativity and wisdom in every woman. We publish thought-provoking fiction, non-fiction, photography, poetry and essays tri-annually (Fall, Winter and Spring) by emerging and established women writers and artists. Submission dates and guidelines can be found on our submit your work page.
In addition, Minerva Rising offers the annual Owl Award: a $500 scholarship established to provide one woman writer with financial support to further her writing endeavors.
Minerva Rising Founder and Editor in Chief, Kim Brown, is a Goddard alumna.
Shabda is the Sanskrit word for "sound, speech." Shabda is the sound current vibrating in all creation referred to as the Audible Life Stream, Inner Sound, and Word. Founded in June 2011 by Teresa Mei Chuc, Shabda Press' mission is to bring forth the diverse, luminous words and sounds of new, emerging, and established voices. Shabda Press is a small, independent press that publishes a few books of poetry a year in print, ebook and audio format (poetry cds). Shabda Press is part of the Coast to Coast Poetry Press Collective, a collective of four small presses, two east of the Mississippi River and two west of the Mississippi River who support each other in sharing and distributing poetry across the country. Editor-in-chief: Goddard MFA alumna Teresa Mei Chuc. Shabda Press is based in Pasadena, California, and you can find them here: www.shabdapress.com.
Shape&Nature Press is a small, independent publisher of poetry, fiction, and creative literary projects founded in 2011. Our mission is to publish the best contemporary literature we can find with an emphasis on work that challenges readers, either through content, craft, shape, or ideas.
In addition to publishing traditional books, we are also committed to dreaming up and facilitating creative literary projects that we think open up the literary experience, meaning we want readers to see, touch, taste, read and otherwise engage in literature in ways they haven't done before. So far, these projects have taken the form of interactive, public art, and have in common the goal of interacting with the greater community in new and interesting ways.
Goddard alumna Maria Williams-Russell is the Founding Editor and heads the editorial team.
"Magic happens when good writers cross over into the territory of their own mastery. This elusive line cannot be measured by outside constraints or conferred by others. The territory of mastery may be known only by those writers who persist in their pursuit of inquiry and discovery. In their hands, we experience the true beauty of surprise."
Founded by MFA alumna Carolyn M. Bardos, Stone Hole Press l3c seeks out authors who must be published; writers who will delight and comfort; storytellers who will take you across the terrain of their tales with skill and truthfulness.
Fine writers.
Enchanted readers.
Founded in 2002 as an online literary journal, Tarpaulin Sky took the form of 12.5 internet issues before deciding to explore anachronism by way of producing its first paper edition in November 2007. Today the magazine continues to publish new work both online and in print. (See our writers' guidelines for more details.) As with Tarpaulin Sky's books, the magazine focuses on cross-genre / trans-genre / hybrid forms as well as innovative poetry and prose. The journal is not allied with any one style or school or network of writers; rather, we try to avoid some of the defects associated with dipping too often into the same literary gene pool, and the diversity of our contributors is evidence of our eclectic interests.
Tarpaulin Sky was founded by Goddard alumnus Christian Peet, who continues to lurk behind the curtain.
The Conium Review publishes innovative writing. We lean toward unconventional plots, bizarre settings, and experimental language. Make it weird.
We are especially interested in work from women, LGBTQ authors, and writers of color. We work with Submission Bombers and other groups to encourage submissions from marginalized writers. We find that marginalized writers often tell the kind of innovative stories that "mainstream" writers cannot or do not.
Along with the journal, we occasionally publish and/or promote special projects, including chapbooks, readings, and writing workshops. We donate a portion of every print-run to charities like Open Books, Better World Books, and Housing Works Bookstore Cafe.
Managing Editor James R. Gapinski, a Goddard alumnus, has attracted a talented masthead of editors that include many Goddard alums.
The Pitkin Review is a peer-reviewed literary journal published biannually by a collaborative community of editors, creative writers, and graphic artists showcasing the best work of their fellow MFA writers in fiction, poetry, creative non-fiction, drama, critical commentary, and cross-genre. At The Pitkin Review, we only accept work from writers currently enrolled in Goddard's MFA in Creative Writing Program, and produced during the writer's time in the program. Each semester, calls for submissions are emailed to all current MFAW writers four to five weeks in advance of the submissions deadline. For further information on submissions, check out the website. The Pitkin is a print magazine with Web Exclusives. To read this work by current Goddard students, please visit The Pitkin Review.
Umbrella Factory isn't just a magazine, it's a community project that includes writers, readers, poets, essayists, filmmakers and anyone doing something especially cool. The scope is rather large but rather simple. We want to establish a community--virtual and actual--where great readers and writers and artists can come together and do their thing, whatever that thing may be. In the smallest sense, we are an online literary magazine. In the broadest sense, the scope of the project includes Umbrella Factory small press publications, workshops, reading series, community events and (in the long haul) a home-base, independent bookstore where we can centralize our most heady aspirations. We want young writers to come to school in Denver because of the Umbrella Factory. We want visiting writers to put us on their must-see list. We want to publish the next crop of authors who make us say, "I wish I'd written that." We want you at the Factory.
Maybe our Mission Statement says it best:
We are a small press determined to connect well-developed readers to intelligent writers and poets through virtual means, printed journals, and books. We believe in making an honest living providing the best writers and poets a forum for their work.
We love what we have here and we want you to love it equally as much. That's why we need your writing, your participation, your involvement and your enthusiasm. We need your voice. Tell everyone you know. Tell everyone who's interested, everyone who's not interested, tell your parents and your kids, your students and your teachers. Tell them the Umbrella Factory is open for business.
Remember, it's raining words. Stay dry.
Anthony ILacqua,Umbrella Factory's Editor in Chief, is a Goddard College alumnus.
Retreats, Conferences and Writing Spaces
Wide Open Writing is a place, a space and a philosophy. It's a creative gathering place and a support mechanism – a connect-up and a source. A go-to international resource offering writing groups, coaching, retreats, and dependable support for those who write and those who want to write, including a top-20 autumn writing retreat in Tuscany.
Spend 7 days and 6 nights in a Tuscan farmhouse nestled in the Chianti region of Italy. Immerse yourself in the Tuscan landscape, local food, fresh air. Limber up during daily morning yoga and let your writing be transformed. 2015 dates: September 6-12th.
Founded and run by a collective including several Goddard alumnae.


text:
If you know me, then you know I love the prog-folk band, Midlake, who hails from just down the path in Denton, TX. Unfortunately, the band has not released so much as a new single since it restructured and released their last album, Antiphon in 2013. There was a re-release of The Trials of Van Occupanther that included two previously unreleased tracks (see end of article to listen to one of them), but fans like me are in want of something substantive.
And in early November, I stumbled onto an announcement from Midlake themselves, "Paul Alexander's solo debut as Two Medicine is out today via the great Bella Union!" Paul Alexander is the bassist for Midlake which, knowing this, my antennae went up looking for signals of what I've been hoping to find. And to my complete joy, here was a fresh album replete with the styles and nuance so clearly trademark sounds of both pre and post Tim Smith!
Available at http://smarturl.it/Astropsychosis and https://amzn.to/2Rki8Ex as streaming, CD, limited edition green vinyl
Track one, SF, opens with a little lo-fi pop style that only barely reflected days of Midlake past which made my heart sink just a little. But by the end of track one, you hear a transition to something quite familiar. The second track, Oblivion at 00:54 punches you square in the face and says, "THIS IS MIDLAKE! Now sit back, have a smoke, relax and enjoy the journey". It is magical sorcery, mixing together misty harmonies with deeply warm layers of mysterious instruments.
Paul Alexander
So why did Paul create this album and what is it all about? Lucky for us, he has answered that."I'd always wanted Midlake to experiment more with the arrangements, or to get more into psychedelic textures," he says for his label, Bella Union. His exploration has led to unique, auditory soundscapes found on tracks like Oblivion, Gold, and the album's namesake, Astropsychosis. The record feels lush and well connected at most points, but can suffer the listener to possible sleepiness as is the risk in this unique genre.
Two Medicine Lake with Rising Wolf Mtn. in the clouds – NPS/Tim Rains
Alexander continues, "Two Medicine is a majestic place, without spoil. The land was ceded to the nation by the Blackfeet tribe. They were likely coerced into the deal, like most of the tribes who gave away their land. It is wild, humbling and probably collateral for the nation's debt, where an inevitable capitulation looms. Beyond its geographical location, to me, the name Two Medicine represents a summation of this irony, whether created or inherited by the people of the United States."
"I wanted to find out if I could write songs and if I could sing them – basically, whether or not I could make an album on my own". Yes, Paul. Yes you can. And you did.
Astropsychosis officially released on 2 November 2018 on the Bella Union label. It is available streaming on Spotify and iTunes, CD, and limited release green vinyl.
Two Medicine debuts tonight at the Warsaw venue, 261 Driggs Ave, Brooklyn, NY, opening for fellow label artist John Grant.
Above, Two Medicine – Gold
Below, Midlake – The Fairest Way (previously unreleased track from The Trials of Van Occupanther)


text:
Bestowed with superhuman strength, a young mortal named Hercules sets out to prove himself a hero in the eyes of his father, the great god Zeus. Along with his friends Pegasus, a flying horse, and Phil, a personal trainer, Hercules is tricked by the hilarious, hotheaded villain Hades, who's plotting to take over Mount Olympus!
Genre : Adventure, Animation, Comedy, Family, Fantasy, Musical, Romance
Actors : Barbara Barrie, Bobcat Goldthwait, Danny DeVito, James Woods, Josh Keaton, Matt Frewer, Rip Torn, Roger Bart, Samantha Eggar, Susan Egan, Tate Donovan
Director : Chung Sup Yoon, John Musker, Rick Moore, Ron Clements
Keywords: Herkuli Hércules Hercules Херкулес Herkules Hèrcules Hercule Iraklis: Pera apo to mytho Ηρακλής: Πέρα από το μύθο Herkul Heraklis Геркулес Herkül
The hectic adventures of D'Artagnan, a young provincial noble who just comes to Paris to enter the musketeers. He will meet action, love, hate, the king and the queen as his impetuousness gets him involved in political plots… and of course virile and indestructible friendship with the three musketeers Athos, Porthos and Aramis. Written by Yepok
Genre: Action, Adventure, Drama, Romance
I Had a Bloody Good Time at House Harker
It's been generations since the Harkers' great-great grandfather killed Count Dracula. Now the Harker brothers and their best friend Ned are a town joke – until a real vampire turns up.
The Jungle Book: Howl at the Moon
Mowgli's on a mission to prove he's a real howling, prowling wolf. But a jealous cub and his creature co-horts will stop at nothing to keep him out of the pack!
Genre: Adventure, Animation, Family
Police in Boston search for a mad bomber trying to extort money from the city.
Genre: Action, Comedy, Crime, Drama, Mystery, Thriller
Teen Witch
Louise is not very popular at her highschool. Then she learns that she's descended from the witches of Salem and has inherited their powers. At first she uses them to get back at the girls and teachers who teased her and to win the heart of the handsome footballer's captain. But soon she has doubts if it's right to 'cheat' her way to popularity.
The 84th Annual Academy Awards
Dead in a Week: Or Your Money Back
William has failed to kill himself so many times that he outsources his suicide to aging assassin Leslie. But with the contract signed and death assured within a week (or his money back), William suddenly discovers reasons to live… However Leslie is under pressure from his boss to make sure the contract is completed.
Genre: Action, Comedy, Drama
Holy Goalie
A young priest coaches a team of uncoordinated monks in order to win a soccer tournament and save their monastery from being turned into a hotel.
Love in the Time of Monsters
Two sisters travel to a cheesy tourist trap where they battle toxic monsters dressed in bigfoot costumes in order to save the ones they love.
The Rumperbutts
A married, indie band duo regretfully takes a job on a children's show ("Rumperbutts"). Despite the money & success, they are miserable. However, on one magical evening, a mysterious man appears & gives them a second chance.
Genre: Comedy, Fantasy, Music
Miami Blues
When Fred gets out of prison, he decides to start over in Miami, where he starts a violent one-man crime wave. He soon meets up with amiable college student Susie. Opposing Fred is Sgt Hoke Moseley, a cop who is getting a bit old for the job, especially since the job of cop in 1980's Miami is getting crazier all the time.
The eruption of the Icelandic volcano Eyjafjallajökull causes major disruptions to travelers' plans around the world. For Alain and Valérie, it's a catastrophe. Because to make it to the small Greek village in time for their daughter's wedding, this divorced couple, whose mutual hatred knows no bounds, will be obliged to set out on the road together.
Country: Belgium, France


* Father Kent Drotar was removed from ministry on the counsel of the Archdiocese of Denver's review board -- not because of anyone's threat, at any time, to go to the press.
* No staff person's contract was terminated or not renewed because of the Szutenbach/Drotar incident. At no point was "retaliation" involved against any person.
Please note that the Szutenbach/Drotar issue is more than a decade old and involved adult misconduct. This in no way excuses or reduces its ugliness, but neither does it imply a systemic lack of vigilance on the part of Church leadership, or a disregard for the safety of minors and their families. Any suggestion otherwise is simply not truthful. Kent Drotar has never had an allegation before or since this matter. I removed him from Denver's seminary immediately upon learning of the issue from the seminary rector. Father Drotar was then seen by multiple mental health professionals. They determined he was not a threat and could return to ministry.
Mr. Szutenbach was represented by a civil attorney, but no civil or criminal action has ever been taken. After Mr. Szutenbach appeared before the Denver review board, they considered, discussed and ultimately recommended Father Drotar's removal. I removed Kent Drotar permanently from ministry the same day.
I leave it to you to consider the timing behind the appearance of yesterday's Inquirer article.
I'm very grateful for your on-going support in this difficult time for the Church.


Since its establishment in 2002, the Connecticut Cancer Partnership has grown from a core group of five organizations to a broad and diverse coalition more than 300 strong, representing elements of the cancer community from across Connecticut. Highlights of the Partnership's history are given below.
This article was published in the January 2017, Volume 81, Number 1, issue of Connecticut Medicine and is reprinted here with permission.
Comprehensive Cancer Plan and Where Do We Go from Here?
Since the publication of the Connecticut Cancer Plan, 2014-2017 genetic risk assessment has become a significant component of the cancer control process. The work of the Connecticut Department of Public Health Genomics Office (DPH-GO) focuses on recommendations related to cancer genetics.
Adoption of survivorship care plans (SCP) is a key objective of The Connecticut Cancer Partnership's 2014-2017 Connecticut Comprehensive Cancer Plans. (1) The Partnership's Survivorship Committee is responsible for devising implementing strategies addressing this objective.