We here at Chive New England have been working hard on our Chapter Charter which outlines the creation of the Board, social media structure and distinct roles and responsibilities. Now that we've finished our first version we'd like to share the updates with you.
The Board for Chive New England is comprised of the roles of Director, Assistant Director, Treasurer, Secretary, Events Coordinator and Marketing Director and will be responsible for steering Chive New England and it's sub-chapters.
Alex Justesen will be assuming the role of Director of Chive New England. He has demonstrated the organization needed for a great director and has the vision to lead Chive New England in the right direction.
Erin Smith will assume the role of Assistant Director of Chive New England. She has shown great leadership skills, is always offering to lend a helping hand and since Berry New England is an important piece of the Chive Nation pie, we felt Berry New England should have proper representation within the Board.
Amanda (Mandie) Provost will assume the role of Treasurer of Chive New England. If you ever have any questions about donations or anything like that, please do not hesitate to contact Mandie about it.
Richard Duchesneau will assume the role of Secretary for Chive New England. He is a very organized person, rocks a mean kilt and brings great ideas to the table.
Johnny Dover will assume the role of Events Coordinator for Chive New England. His larger than life personality and creativity made him a fantastic choice for this role.
Kristyn Simmons will assume the role of Marketing Director for Chive New England. She has excelled at creating awesome marketing materials and is constantly bringing new and creative ideas to the group.
Erin Smith, Kristyn Simmons, Ben Bean and Steven Iacolo for Chive On MA.
Aisa Burke and Mandie Provost for Chive On RI.
Alex Justesen, Rich Duchesneau, Ashley Knack and Scott Houston for Chive CT.
Johnny Dover, Mackenzie Vogel and Scott Desaulniers for NH Chive.
Kristyn Simmons, Erin Smith, Amanda Provost, Ashley Knack and Mackenzie Vogel for Berry New England.
Brand Ambassadors are still needed for most states, but Chive On MA is happy to announce PJ Sarro as their first Brand Ambassador! Please contact any Admin if you are interested in becoming a Brand Ambassador.
The role of Editor is yet to be filled, if you are interested in helping us and have a strong editorial background please contact us.
Web Administrator will currently be occupied by Alex Justesen in the interim. We are working on finding someone for this position as well, if you are interested please contact us.
In addition to clearly defined roles we took a hard look at our social media presence. We looked at all our accounts, pages and profiles and took the opportunity to standardize our presence.
Next story A fresh coat of paint!
Previous story How do we provide a venue to enable open feedback?


text:
require File.join(File.dirname(__FILE__), "../spec_helper.rb")

describe Her::Model::Associations do
  context "setting associations without details" do
    before { spawn_model "Foo::User" }
    subject(:associations) { Foo::User.associations }

    describe "has_many associations" do
      subject { associations[:has_many] }

      context "single" do
        let(:comments_association) do
          {
            name: :comments,
            data_key: :comments,
            default: [],
            class_name: "Comment",
            path: "/comments",
            inverse_of: nil
          }
        end
        before { Foo::User.has_many :comments }

        it { is_expected.to eql [comments_association] }
      end

      context "multiple" do
        let(:comments_association) do
          {
            name: :comments,
            data_key: :comments,
            default: [],
            class_name: "Comment",
            path: "/comments",
            inverse_of: nil
          }
        end
        let(:posts_association) do
          {
            name: :posts,
            data_key: :posts,
            default: [],
            class_name: "Post",
            path: "/posts",
            inverse_of: nil
          }
        end
        before do
          Foo::User.has_many :comments
          Foo::User.has_many :posts
        end

        it { is_expected.to eql [comments_association, posts_association] }
      end
    end

    describe "has_one associations" do
      subject { associations[:has_one] }

      context "single" do
        let(:category_association) do
          {
            name: :category,
            data_key: :category,
            default: nil,
            class_name: "Category",
            path: "/category"
          }
        end
        before { Foo::User.has_one :category }

        it { is_expected.to eql [category_association] }
      end

      context "multiple" do
        let(:category_association) do
          {
            name: :category,
            data_key: :category,
            default: nil,
            class_name: "Category",
            path: "/category"
          }
        end
        let(:role_association) do
          {
            name: :role,
            data_key: :role,
            default: nil,
            class_name: "Role",
            path: "/role"
          }
        end
        before do
          Foo::User.has_one :category
          Foo::User.has_one :role
        end

        it { is_expected.to eql [category_association, role_association] }
      end
    end

    describe "belongs_to associations" do
      subject { associations[:belongs_to] }

      context "single" do
        let(:organization_association) do
          {
            name: :organization,
            data_key: :organization,
            default: nil,
            class_name: "Organization",
            foreign_key: "organization_id",
            path: "/organizations/:id"
          }
        end
        before { Foo::User.belongs_to :organization }

        it { is_expected.to eql [organization_association] }
      end

      context "multiple" do
        let(:organization_association) do
          {
            name: :organization,
            data_key: :organization,
            default: nil,
            class_name: "Organization",
            foreign_key: "organization_id",
            path: "/organizations/:id"
          }
        end
        let(:family_association) do
          {
            name: :family,
            data_key: :family,
            default: nil,
            class_name: "Family",
            foreign_key: "family_id",
            path: "/families/:id"
          }
        end
        before do
          Foo::User.belongs_to :organization
          Foo::User.belongs_to :family
        end

        it { is_expected.to eql [organization_association, family_association] }
      end
    end
  end

  context "setting associations with details" do
    before { spawn_model "Foo::User" }
    subject(:associations) { Foo::User.associations }

    context "in base class" do
      describe "has_many associations" do
        subject { associations[:has_many] }

        context "single" do
          let(:comments_association) do
            {
              name: :comments,
              data_key: :user_comments,
              default: {},
              class_name: "Post",
              path: "/comments",
              inverse_of: :admin
            }
          end
          before do
            Foo::User.has_many :comments, class_name: "Post",
                                          inverse_of: :admin,
                                          data_key: :user_comments,
                                          default: {}
          end

          it { is_expected.to eql [comments_association] }
        end
      end

      describe "has_one associations" do
        subject { associations[:has_one] }

        context "single" do
          let(:category_association) do
            {
              name: :category,
              data_key: :topic,
              default: nil,
              class_name: "Topic",
              foreign_key: "topic_id",
              path: "/category"
            }
          end
          before do
            Foo::User.has_one :category, class_name: "Topic",
                                         foreign_key: "topic_id",
                                         data_key: :topic, default: nil
          end

          it { is_expected.to eql [category_association] }
        end
      end

      describe "belongs_to associations" do
        subject { associations[:belongs_to] }

        context "single" do
          let(:organization_association) do
            {
              name: :organization,
              data_key: :org,
              default: true,
              class_name: "Business",
              foreign_key: "org_id",
              path: "/organizations/:id"
            }
          end
          before do
            Foo::User.belongs_to :organization, class_name: "Business",
                                                foreign_key: "org_id",
                                                data_key: :org,
                                                default: true
          end

          it { is_expected.to eql [organization_association] }
        end
      end
    end

    context "in parent class" do
      before { Foo::User.has_many :comments, class_name: "Post" }

      describe "associations accessor" do
        subject(:associations) { Class.new(Foo::User).associations }

        describe "#object_id" do
          subject { associations.object_id }
          it { is_expected.not_to eql Foo::User.associations.object_id }
        end

        describe "[:has_many]" do
          subject { associations[:has_many] }
          let(:association) do
            {
              name: :comments,
              data_key: :comments,
              default: [],
              class_name: "Post",
              path: "/comments",
              inverse_of: nil
            }
          end

          it { is_expected.to eql [association] }
        end
      end
    end
  end

  context "handling associations without details" do
    before do
      spawn_model "Foo::User" do
        has_many :comments, class_name: "Foo::Comment"
        has_one :role, class_name: "Foo::Role"
        belongs_to :organization, class_name: "Foo::Organization"
        has_many :posts, inverse_of: :admin
      end

      spawn_model "Foo::Comment" do
        belongs_to :user
        parse_root_in_json true
      end

      spawn_model "Foo::Post" do
        belongs_to :admin, class_name: "Foo::User"
      end

      spawn_model "Foo::Organization" do
        parse_root_in_json true
      end

      spawn_model "Foo::Role"
    end

    context "with included data" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Fünke", comments: [{ comment: { id: 2, body: "Tobias, you blow hard!", user_id: 1 } }, { comment: { id: 3, body: "I wouldn't mind kissing that man between the cheeks, so to speak", user_id: 1 } }], role: { id: 1, body: "Admin" }, organization: { id: 1, name: "Bluth Company" }, organization_id: 1 }.to_json] }
            stub.get("/users/1/comments") { [200, {}, [{ comment: { id: 4, body: "They're having a FIRESALE?" } }].to_json] }
            stub.get("/users/1/role") { [200, {}, { id: 3, body: "User" }.to_json] }
            stub.get("/users/1/posts") { [200, {}, [{ id: 1, body: "blogging stuff", admin_id: 1 }].to_json] }
            stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
          end
        end
      end

      let(:user) { Foo::User.find(1) }
      let(:user_params) { user.to_params }

      it "maps an array of included data through has_many" do
        expect(user.comments.first).to be_a(Foo::Comment)
        expect(user.comments.length).to eq(2)
        expect(user.comments.first.id).to eq(2)
        expect(user.comments.first.body).to eq("Tobias, you blow hard!")
      end

      it "does not refetch the parents models data if they have been fetched before" do
        expect(user.comments.first.user.object_id).to eq(user.object_id)
      end

      it "uses the given inverse_of key to set the parent model" do
        expect(user.posts.first.admin.object_id).to eq(user.object_id)
      end

      it "fetches has_many data even if it was included, only if called with parameters" do
        expect(user.comments.where(foo_id: 1).length).to eq(1)
      end

      it "maps an array of included data through has_one" do
        expect(user.role).to be_a(Foo::Role)
        expect(user.role.object_id).to eq(user.role.object_id)
        expect(user.role.id).to eq(1)
        expect(user.role.body).to eq("Admin")
      end

      it "fetches has_one data even if it was included, only if called with parameters" do
        expect(user.role.where(foo_id: 2).id).to eq(3)
      end

      it "maps an array of included data through belongs_to" do
        expect(user.organization).to be_a(Foo::Organization)
        expect(user.organization.id).to eq(1)
        expect(user.organization.name).to eq("Bluth Company")
      end

      it "fetches belongs_to data even if it was included, only if called with parameters" do
        expect(user.organization.where(foo_id: 1).name).to eq("Bluth Company Foo")
      end

      it "includes has_many relationships in params by default" do
        expect(user_params[:comments]).to be_kind_of(Array)
        expect(user_params[:comments].length).to eq(2)
      end

      it "includes has_one relationship in params by default" do
        expect(user_params[:role]).to be_kind_of(Hash)
        expect(user_params[:role]).not_to be_empty
      end

      it "includes belongs_to relationship in params by default" do
        expect(user_params[:organization]).to be_kind_of(Hash)
        expect(user_params[:organization]).not_to be_empty
      end
    end

    context "without included data" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.get("/users/2") { [200, {}, { id: 2, name: "Lindsay Fünke", organization_id: 2 }.to_json] }
            stub.get("/users/2/comments") { [200, {}, [{ comment: { id: 4, body: "They're having a FIRESALE?" } }, { comment: { id: 5, body: "Is this the tiny town from Footloose?" } }].to_json] }
            stub.get("/users/2/comments/5") { [200, {}, { comment: { id: 5, body: "Is this the tiny town from Footloose?" } }.to_json] }
            stub.get("/users/2/role") { [200, {}, { id: 2, body: "User" }.to_json] }
            stub.get("/organizations/2") do |env|
              if env[:params]["admin"] == "true"
                [200, {}, { organization: { id: 2, name: "Bluth Company (admin)" } }.to_json]
              else
                [200, {}, { organization: { id: 2, name: "Bluth Company" } }.to_json]
              end
            end
          end
        end
      end

      let(:user) { Foo::User.find(2) }

      it "fetches data that was not included through has_many" do
        expect(user.comments.first).to be_a(Foo::Comment)
        expect(user.comments.length).to eq(2)
        expect(user.comments.first.id).to eq(4)
        expect(user.comments.first.body).to eq("They're having a FIRESALE?")
      end

      it "fetches data that was not included through has_many only once" do
        expect(user.comments.first.object_id).to eq(user.comments.first.object_id)
      end

      it "fetches data that was cached through has_many if called with parameters" do
        expect(user.comments.first.object_id).not_to eq(user.comments.where(foo_id: 1).first.object_id)
      end

      it "fetches data again after being reloaded" do
        expect { user.comments.reload }.to change { user.comments.first.object_id }
      end

      it "fetches data that was not included through has_one" do
        expect(user.role).to be_a(Foo::Role)
        expect(user.role.id).to eq(2)
        expect(user.role.body).to eq("User")
      end

      it "fetches data that was not included through belongs_to" do
        expect(user.organization).to be_a(Foo::Organization)
        expect(user.organization.id).to eq(2)
        expect(user.organization.name).to eq("Bluth Company")
      end

      it "can tell if it has a association" do
        expect(user.has_association?(:unknown_association)).to be false
        expect(user.has_association?(:organization)).to be true
      end

      it "fetches the resource corresponding to a named association" do
        expect(user.get_association(:unknown_association)).to be_nil
        expect(user.get_association(:organization).name).to eq("Bluth Company")
      end

      it "pass query string parameters when additional arguments are passed" do
        expect(user.organization.where(admin: true).name).to eq("Bluth Company (admin)")
        expect(user.organization.name).to eq("Bluth Company")
      end

      it "fetches data with the specified id when calling find" do
        comment = user.comments.find(5)
        expect(comment).to be_a(Foo::Comment)
        expect(comment.id).to eq(5)
      end

      it "'s associations responds to #empty?" do
        expect(user.organization.respond_to?(:empty?)).to be_truthy
        expect(user.organization).not_to be_empty
      end
    end

    context "without included parent data" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
        end
      end

      let(:comment) { Foo::Comment.new(id: 7, user_id: 1) }

      it "does fetch the parent models data only once" do
        expect(comment.user.object_id).to eq(comment.user.object_id)
      end

      it "does fetch the parent models data that was cached if called with parameters" do
        expect(comment.user.object_id).not_to eq(comment.user.where(a: 2).object_id)
      end
    end

    context "when resource is new" do
      let(:new_user) { Foo::User.new }

      it "doesn't attempt to fetch association data" do
        expect(new_user.comments).to eq([])
        expect(new_user.role).to be_nil
        expect(new_user.organization).to be_nil
      end
    end

    context "when foreign_key is nil" do
      before do
        spawn_model "Foo::User" do
          belongs_to :organization, class_name: "Foo::Organization"
        end

        spawn_model "Foo::Organization" do
          parse_root_in_json true
        end
      end

      let(:user) { Foo::User.new(organization_id: nil, name: "Katlin Fünke") }

      it "returns nil" do
        expect(user.organization).to be_nil
      end
    end

    context "after" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.post("/users") { [200, {}, { id: 5, name: "Mr. Krabs", comments: [{ comment: { id: 99, body: "Rodríguez, nasibisibusi?", user_id: 5 } }], role: { id: 1, body: "Admin" }, organization: { id: 3, name: "Krusty Krab" }, organization_id: 3 }.to_json] }
            stub.put("/users/5") { [200, {}, { id: 5, name: "Clancy Brown", comments: [{ comment: { id: 99, body: "Rodríguez, nasibisibusi?", user_id: 5 } }], role: { id: 1, body: "Admin" }, organization: { id: 3, name: "Krusty Krab" }, organization_id: 3 }.to_json] }
            stub.delete("/users/5") { [200, {}, { id: 5, name: "Clancy Brown", comments: [{ comment: { id: 99, body: "Rodríguez, nasibisibusi?", user_id: 5 } }], role: { id: 1, body: "Admin" }, organization: { id: 3, name: "Krusty Krab" }, organization_id: 3 }.to_json] }
          end
        end
      end

      let(:user_after_create) { Foo::User.create }
      let(:user_after_save_existing) { Foo::User.save_existing(5, name: "Clancy Brown") }
      let(:user_after_destroy) { Foo::User.new(id: 5).destroy }

      [:create, :save_existing, :destroy].each do |type|
        context "after #{type}" do
          let(:subject) { send("user_after_#{type}") }

          it "maps an array of included data through has_many" do
            expect(subject.comments.first).to be_a(Foo::Comment)
            expect(subject.comments.length).to eq(1)
            expect(subject.comments.first.id).to eq(99)
            expect(subject.comments.first.body).to eq("Rodríguez, nasibisibusi?")
          end

          it "maps an array of included data through has_one" do
            expect(subject.role).to be_a(Foo::Role)
            expect(subject.role.id).to eq(1)
            expect(subject.role.body).to eq("Admin")
          end
        end
      end
    end
  end

  context "handling associations with details in active_model_serializers format" do
    before do
      spawn_model "Foo::User" do
        parse_root_in_json true, format: :active_model_serializers
        has_many :comments, class_name: "Foo::Comment"
        has_one :role, class_name: "Foo::Role"
        belongs_to :organization, class_name: "Foo::Organization"
      end

      spawn_model "Foo::Role" do
        belongs_to :user
        parse_root_in_json true, format: :active_model_serializers
      end

      spawn_model "Foo::Comment" do
        belongs_to :user
        parse_root_in_json true, format: :active_model_serializers
      end

      spawn_model "Foo::Organization" do
        parse_root_in_json true, format: :active_model_serializers
      end
    end

    context "with included data" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.get("/users/1") { [200, {}, { user: { id: 1, name: "Tobias Fünke", comments: [{ id: 2, body: "Tobias, you blow hard!", user_id: 1 }, { id: 3, body: "I wouldn't mind kissing that man between the cheeks, so to speak", user_id: 1 }], role: { id: 1, body: "Admin" }, organization: { id: 1, name: "Bluth Company" }, organization_id: 1 } }.to_json] }
            stub.get("/users/1/comments") { [200, {}, { comments: [{ id: 4, body: "They're having a FIRESALE?" }] }.to_json] }
            stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
          end
        end
      end

      let(:user) { Foo::User.find(1) }
      let(:user_params) { user.to_params }

      it "maps an array of included data through has_many" do
        expect(user.comments.first).to be_a(Foo::Comment)
        expect(user.comments.length).to eq(2)
        expect(user.comments.first.id).to eq(2)
        expect(user.comments.first.body).to eq("Tobias, you blow hard!")
      end

      it "does not refetch the parents models data if they have been fetched before" do
        expect(user.comments.first.user.object_id).to eq(user.object_id)
      end

      it "fetches has_many data even if it was included, only if called with parameters" do
        expect(user.comments.where(foo_id: 1).length).to eq(1)
      end

      it "maps an array of included data through belongs_to" do
        expect(user.organization).to be_a(Foo::Organization)
        expect(user.organization.id).to eq(1)
        expect(user.organization.name).to eq("Bluth Company")
      end

      it "fetches belongs_to data even if it was included, only if called with parameters" do
        expect(user.organization.where(foo_id: 1).name).to eq("Bluth Company Foo")
      end

      it "includes has_many relationships in params by default" do
        expect(user_params[:comments]).to be_kind_of(Array)
        expect(user_params[:comments].length).to eq(2)
      end

      it "includes has_one relationships in params by default" do
        expect(user_params[:role]).to be_kind_of(Hash)
        expect(user_params[:role]).not_to be_empty
      end

      it "includes belongs_to relationship in params by default" do
        expect(user_params[:organization]).to be_kind_of(Hash)
        expect(user_params[:organization]).not_to be_empty
      end
    end

    context "without included data" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.get("/users/2") { [200, {}, { user: { id: 2, name: "Lindsay Fünke", organization_id: 1 } }.to_json] }
            stub.get("/users/2/comments") { [200, {}, { comments: [{ id: 4, body: "They're having a FIRESALE?" }, { id: 5, body: "Is this the tiny town from Footloose?" }] }.to_json] }
            stub.get("/users/2/comments/5") { [200, {}, { comment: { id: 5, body: "Is this the tiny town from Footloose?" } }.to_json] }
            stub.get("/organizations/1") { [200, {}, { organization: { id: 1, name: "Bluth Company Foo" } }.to_json] }
          end
        end
      end

      let(:user) { Foo::User.find(2) }

      it "fetches data that was not included through has_many" do
        expect(user.comments.first).to be_a(Foo::Comment)
        expect(user.comments.length).to eq(2)
        expect(user.comments.first.id).to eq(4)
        expect(user.comments.first.body).to eq("They're having a FIRESALE?")
      end

      it "fetches data that was not included through belongs_to" do
        expect(user.organization).to be_a(Foo::Organization)
        expect(user.organization.id).to eq(1)
        expect(user.organization.name).to eq("Bluth Company Foo")
      end

      it "fetches data with the specified id when calling find" do
        comment = user.comments.find(5)
        expect(comment).to be_a(Foo::Comment)
        expect(comment.id).to eq(5)
      end
    end
  end

  context "handling associations with details" do
    before do
      spawn_model "Foo::User" do
        belongs_to :company, path: "/organizations/:id", foreign_key: :organization_id, data_key: :organization
      end

      spawn_model "Foo::Company"
    end

    context "with included data" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.get("/users/1") { [200, {}, { id: 1, name: "Tobias Fünke", organization: { id: 1, name: "Bluth Company Inc." }, organization_id: 1 }.to_json] }
            stub.get("/users/4") { [200, {}, { id: 1, name: "Tobias Fünke", organization: { id: 1, name: "Bluth Company Inc." } }.to_json] }
            stub.get("/users/3") { [200, {}, { id: 2, name: "Lindsay Fünke", company: nil }.to_json] }
            stub.get("/companies/1") { [200, {}, { id: 1, name: "Bluth Company" }.to_json] }
          end
        end
      end

      let(:user) { Foo::User.find(1) }

      it "maps an array of included data through belongs_to" do
        expect(user.company).to be_a(Foo::Company)
        expect(user.company.id).to eq(1)
        expect(user.company.name).to eq("Bluth Company Inc.")
      end

      context "when included data is nil" do
        let(:user) { Foo::User.find(3) }

        it "does not map included data" do
          expect(user.company).to be_nil
        end
      end

      context "when included data has no foreign_key" do
        let(:user) { Foo::User.find(4) }

        it "maps included data anyway" do
          expect(user.company.name).to eq("Bluth Company Inc.")
        end
      end
    end

    context "without included data" do
      before(:context) do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.get("/users/2") { [200, {}, { id: 2, name: "Lindsay Fünke", organization_id: 1 }.to_json] }
            stub.get("/companies/1") { [200, {}, { id: 1, name: "Bluth Company" }.to_json] }
          end
        end
      end

      let(:user) { Foo::User.find(2) }

      it "fetches data that was not included through belongs_to" do
        expect(user.company).to be_a(Foo::Company)
        expect(user.company.id).to eq(1)
        expect(user.company.name).to eq("Bluth Company")
      end
    end
  end

  context "object returned by the association method" do
    before do
      spawn_model "Foo::Role" do
        def present?
          "of_course"
        end
      end
      spawn_model "Foo::User" do
        has_one :role
      end
    end

    let(:associated_value) { Foo::Role.new }
    let(:user_with_role) do
      Foo::User.new.tap { |user| user.role = associated_value }
    end

    subject { user_with_role.role }

    it "doesnt mask the object's basic methods" do
      expect(subject.class).to eq(Foo::Role)
    end

    it "doesnt mask core methods like extend" do
      committer = Module.new
      subject.extend committer
      expect(associated_value).to be_kind_of committer
    end

    it "can return the association object" do
      expect(subject.association).to be_kind_of Her::Model::Associations::Association
    end

    it "still can call fetch via the association" do
      expect(subject.association.fetch).to eq associated_value
    end

    it "calls missing methods on associated value" do
      expect(subject.present?).to eq("of_course")
    end

    it "can use association methods like where" do
      expect(subject.where(role: "committer").association
        .params).to include :role
    end
  end

  context "building and creating association data" do
    before do
      spawn_model "Foo::Comment"
      spawn_model "Foo::User" do
        has_many :comments
      end
    end

    context "with #build" do
      let(:comment) { Foo::User.new(id: 10).comments.build(body: "Hello!") }

      it "takes the parent primary key" do
        expect(comment.body).to eq("Hello!")
        expect(comment.user_id).to eq(10)
      end
    end

    context "with #create" do
      let(:user) { Foo::User.find(10) }
      let(:comment) { user.comments.create(body: "Hello!") }

      before do
        Her::API.setup url: "https://api.example.com" do |builder|
          builder.use Her::Middleware::FirstLevelParseJSON
          builder.use Faraday::Request::UrlEncoded
          builder.adapter :test do |stub|
            stub.get("/users/10") { [200, {}, { id: 10 }.to_json] }
            stub.post("/comments") { |env| [200, {}, { id: 1, body: Faraday::Utils.parse_query(env[:body])["body"], user_id: Faraday::Utils.parse_query(env[:body])["user_id"].to_i }.to_json] }
          end
        end

        Foo::User.use_api Her::API.default_api
        Foo::Comment.use_api Her::API.default_api
      end

      it "takes the parent primary key and saves the resource" do
        expect(comment.id).to eq(1)
        expect(comment.body).to eq("Hello!")
        expect(comment.user_id).to eq(10)
        expect(user.comments).to eq([comment])
      end
    end

    context "with #new" do
      let(:user) { Foo::User.new(name: "vic", comments: [comment]) }

      context "using hash attributes" do
        let(:comment) { { text: "hello" } }

        it "assigns nested models" do
          expect(user.comments.first.text).to eq("hello")
        end
      end

      context "using constructed objects" do
        let(:comment) { Foo::Comment.new(text: "goodbye") }

        it "assigns nested models" do
          expect(user.comments.first.text).to eq("goodbye")
        end
      end
    end
  end
end

redpajama_set_name: RedPajamaGithub


Hello Everyone, it's Bertie here. I would just like to thank everyone who helped my mum raise money for my knee surgery.
It's been 8 weeks now since I had my knee operation and I'm feeling so much better. After my op, I wasn't allowed to do anything, so I spent my first couple of weeks just confined to the house with only little visits into the garden. Gradually, I was able to increase my outings and now I hardly limp at all because my knee is so much more comfortable and is getting better and better each day.
Me and mum are now able to go out for short walks and these will get longer and longer each month which I am really pleased about. I'm going for my first post-op x-ray soon so the vet can see how my knee is healing and, hopefully, by the middle of January, I should be back to my usual activities. I'm really looking forward to being able to go out to play again with my best mate Buddy.


6000 Meters Diameter 0.25mm Sparkle Fiber Optic Side Glow Optical Fiber Waterscreen Optical Fiber Item Type: Optic Fiber Lights Is_customized: Yes Plastic Optical Fiber: 6000m Diameter..
Name: fiber optic lighting / plastic optical fiberSize: 0.25 mmQuantity: 2 m * 500PCS FeaturesFiber optic lighting is newly developed in recent years, a new high-tech lighting technology. It has ener..
Protection class:AFlux:2200LMSource:LEDLife:30000HPart Number:G4-H11APPLICATION:CarComplementary relationship:SupportingColor:WhiteType:LED headlampsEnergy:Ultra-low powerChip:creeWelcome to the major..
The XR3301(1mw/5mw/10mw/20mw/30mw)is specially designed for field personnel who need an efficient and economical tool for fiber tracing, fiber routing and continuity checking in an optical network du..
Product Dimensions: 165 * 88 * 40MM Weight: 0.75KG Voltage: 90-265V universal Frequency: 50-60HZ Power: 16W Working temperature: -10-40 degrees Features: red, green, and blue color variation pattern ..
Protection class:AFlux:4400LMSource:LEDLife:30000HPart Number:G4-H3APPLICATION:CarComplementary relationship:SupportingColor:5000kType:LED headlampsEnergy:Ultra-low powerWelcome to the majority of cus..
Related Items-------------------------------------------------------------------------------------------------------------------------------------------------- 5meters inner diameter 14.0mm Side Gl..
Optical fiber light is fashion decoration light, this kit is used to make a magic night colour change star effect, it generally be used in home decoration, under water lighting, billboard, bar, part..
Item specifics is_customized:Yes Brand Name:RITA Light Source:LED Bulbs Certification:CCC,CE,FCC,GS,RoHS Voltage:12V Model Number:TA Item Type:Other Place of Origin:Guangdong, China (Mainland) Produc..
This sparkle cable has 3 strand of 0.75mm side sparkle fiber optic, which is of 15mm dot spacing, it is sheathed in a clear PVC cable, it brings a very bright side sparkle light for your sensory fi..
Black PE plastic fiber, solid core fiber end glow 1.5mm/2.5mm optic fiber cable with black jacket for DIY fiber optic lights Features: With black PE jacket, extending using life , better ant..


text:
Spurs' Manu Ginobili heads Basketball Hall of Fame finalists
CLEVELAND — Manu Ginobili, a four-time NBA champion who spent his entire career with the San Antonio Spurs, headlines this year's group of finalists for induction into the Naismith Memorial Basketball Hall of Fame.
Ginobili was one of 11 finalists announced at a press conference Friday as part of All-Star Weekend events.
Former All-Star players Michael Cooper, Tim Hardaway and Marques Johnson will also be voted on for possible induction along with NBA coach George Karl and WNBA stars Swin Cash and Lindsay Whalen.
West Virginia coach Bob Huggins also is up for induction along with Old Dominion and WNBA coach Marianne Staley, longtime NBA referee Hugh Evans and Texas high school coach Leta Andrews.
The finalists will be voted on by a panel to determine this year's class of inductees.
The 44-year-old Ginobili retired from the league following the 2017-18 season. Along with fellow Hall of Fame forward Tim Duncan and guard Tony Parker, the Argentine forward was a key member of the Spurs teams that won titles in 2003, 2005, 2006 and 2014.
He also helped Argentina win an Olympic gold medal in 2004.
The Hall of Fame also announced New York Knicks Hall of Famer Walt Frazier, writer Mechelle Voepel and NBC executive Dick Ebersol are the 2022 Curt Gowdy Media Award recipients.
The Hall of Fame's class of 2022 will be announced at the men's Final Four on April 2 in New Orleans. The enshrinement is scheduled for Sept. 10 in Springfield, Massachusetts.

redpajama_set_name: RedPajamaCommonCrawl


News-watch monitored and logged every edition of Today between 17 September and 20 October, a period of five weeks or 30 editions. Detailed monitoring was undertaken for the weeks of the European Council meeting in Salzburg (17-22 September) and the Informal Meeting of Heads of State and Government in Brussels (15-20 October). This involved the full transcription of all reports pertaining to Brexit or the UK's relationship with the European Union, as well as the analysis of these transcripts both quantitatively and qualitatively.


People seek therapy for many different reasons and everyone has different goals in mind. Some come to me for help when they find themselves feeling sad, or lonely, or when they find themselves feeling stressed and worried. Some because they need a safe place to work through thoughts and feelings that seem to keep them from living the life they hope for. Others for help in building more satisfying relationships. Regardless of the reason you may be seeking therapy, together we will endeavor to create a safe place in which you may discover more about yourself, build the confidence and skills necessary for growth, and find the connection and meaning you long for.
In addition to providing psychotherapy based on an integration of psychodynamic, systemic and attachment theories, I also bring to the therapeutic relationship specialized understandings of Emotionally Focused Couples Therapy (EFT), Eye Movement Desensitization Reprocessing Theory (EMDR) and Clinical Hypnosis.
I strive to provide a safe, secure and confidential environment. As a result I do not connect with clients (present or former) via social media. Outside of the provisions of my Privacy Practices notice I do not acknowledge inquiries about current or former clients.


UPLevel serves national and regional business operations delivering a unique combination of services which support every stage of the business process.
UPLevel has built interfaces across the country accessing thousands of datapoints with access to provincial and national search databases.
Credit investigations and due diligence research are provided through the Credit Bureau and as part of the Equifax network, reducing your risk and compiling data to give you confidence in your decisions.
Execute on informed decisions around these pivotal hires with sound research and confirmed data.
UPLevel was the very first service provider in Canada to offer fully harmonized, national access to registration and searches under the provincial Personal Property Security Acts. UPLevel supports both on line access as well as B2B system interfaces with many host banking and loan origination systems.
UPLevel has been selected to create secure interfaces with FI technology innovators such as CGI, Fi-serv, CRI, Selient, and SIT Portfolio Plus for loan management and banking software.
UPLevel is focused on creating the best customer experience for Business Process Outsourcing projects ranging from contact management, payment processing, credit card activation, satisfaction surveys, help desk, inbound support responding to marketing campaigns and much more. Our commitment to culture sets us apart from other providers – learn more here….


text:
Ray Wilson
Music Hall Worpswede, 5 November 2021
Ray Wilson live in Worpswede 2021
MusicHall Worpswede - 5. November 2021
After the concert in 2020 could not take place due to COVID restrictions, Ray Wilson finally returned to the MusicHall in Worpswede on 5 November 2021. For those who don't know it: Worpswede is a small town in the "Teufelsmoor" near Bremen, also known as an artists' village. The MusicHall is located in an old building with a thatched roof and offers space for (estimated) a few hundred guests. What is Ray Wilson doing in such a small village? Well, the Music Hall is a very cosy music club, and usually the atmosphere at concerts here is always excellent. That is certainly one reason why Ray Wilson's concert in Worpswede in 2004 was immortalised on the double CD Live. The MusicHall is one of a handful of clubs in Germany where Ray Wilson has played practically every year for almost twenty years.
To write a report about a concert visit in these times without mentioning the circumstances of the event with regard to Corona would be to ignore something very important. Concerts are not yet something that can be taken for granted again; there are still nowhere near as many as there were before March 2020, there are sometimes great regional differences in the measures against the pandemic, and despite all the good planning and preparation, scheduled concerts can also be cancelled, postponed or moved at short notice. Therefore, at this point: the concert in Worpswede took place under 2G conditions, i.e. the ticket holders had to be either vaccinated or recovered from Covid19. At the time of the concert, this was still optional in the German state Lower Saxony and probably still somewhat unusual for quite a few of the fans there [author's note: this text was written two weeks after the concert, and the pandemic situation in Germany has worsened so much in the meantime that "2G" has now become almost universal standard, among other things at concerts and in the catering trade, if events take place at all]. In addition, by means of an app and the leaving of contact details, the possibility of hopefully not having to track contacts later on was provided for. This made it possible to fill the MusicHall almost to capacity, and inside it was possible to dispense with mouth and nose protection.
So the anticipation was all the greater to see Ray Wilson again in the MusicHall, and the mood was really good, as the concert could take place without any significant restrictions. Since, just like Ray Wilson, there are also numerous fans and music enthusiasts who are drawn to Worpswede from near and far (almost) every year, it was wonderful to meet up with some old acquaintances even from further away after a long time..
The concert was once again played by six people: Ray Wilson (guitar, vocals) was joined on stage by his brother Steve Wilson (guitar and background vocals), Marcin Kajper (saxophone, clarinet and bass), Kool Lyczek (keys), Alicja Chrzaszcz (violin) and Mario Koszel (drums). This composition of the band is now the one that can be found at most of Ray Wilson's performances. Unlike in most previous years, Lawrie MacMillan (bass) and Ali Ferguson (guitar) were not part of the party this time; both live in Scotland, and due to the Brexit and other reasons, their appearances as part of Ray Wilson's band in continental Europe have unfortunately become very rare. This is a great pity, but even without them, the Worpswede show was a great evening.
As almost always with Ray Wilson, the concert consisted of two parts plus an encore. The setlist was a good mix of old and new: sometimes with a Genesis reference - exactly half of the 26 tracks played were from the Genesis "universe", some from Ray Wilson's solo work, plus other covers. Here is a quick run-through:
No Son Of Mine is often played by Ray Wilson at the beginning of a concert, to warm up the band and the audience - as was the case at the concert in Worpswede.
The audience was decently activated with the relaxed That's All. The saxophone solo towards the end should be highlighted here, in which Marcin Kajper played the melody line with fervour and made it clear that full commitment would be given at the concert..
Take It Slow from the album Chasing Rainbows then brought some calm back into the game and also included a great saxophone solo, but this time played rather deliberately. It's great what Marcin Kajper can elicit from his soft-sounding instrument.
Lemon Yellow Sun from the Stiltskin reissue album She was again reminiscent of James Blunt's Stay The Night, which, however, was released much later. In Your Eyes by Peter Gabriel began - unlike the original - with only vocals and acoustic guitar, to which the whole band joined in with the first bridge.
Carpet Crawlers is not only a Genesis classic, but has also long been one at Ray Wilson concerts. Since the beginning of his post-Genesis period, he has played it again and again, sometimes greatly reduced, sometimes with a full band. So in Worpswede, too, the band gradually joined in. The guitar solo was taken over by Steve Wilson, who, however, plays a bit straighter than Steve Hackett. At the concert, the announcement before the piece caused a few smiles: Ray Wilson was already about to announce Change - the next piece - and had to be reminded by his brother to stick to the planned setlist order.
That Change came next was therefore no longer a surprise. The piece has changed only insignificantly in all the years since it was written - the version played in Worpswede was therefore very close to the studio version, which is almost twenty years old..
Not About Us was the first track from the album Calling All Stations. Close to the original and nice that Ray Wilson plays it again and again, because this creative period of Genesis itself is virtually ignored.
With Almost Famous the show continued similarly quiet. The piece was the first of a total of four from the current album The Weight Of Man, which were played in Worpswede. Here the 12-string guitar was used by Steve Wilson, as in the following tracks also.
Symptomatic was the second "new" track. In quotation marks, because it had already been played frequently during the previous months, only on this evening it celebrated its premiere in Worpswede. The quiet intro was played by Kool Lyczek and Alicja Chrzaszcz - with a lot of vibrato in the violin playing..
Follow You Follow Me was another Genesis classic, always interpreted by Ray Wilson in a more guitar-oriented way. For the solo actually played by Tony Banks on the keyboard, which was now played by Alicja Chrzaszcz on the violin, there was some extra applause. This was the end of the first half of the show.
The second part of the concert got off to a rocking start with Calling All Stations. Ray Wilson hasn't been able to reach all the high notes in this really demanding Genesis song for some time now, but that didn't detract from the quality of the piece or the enthusiasm of the performance.
Makes Me Think Of Home was possibly the highlight of the concert. In particular, the ever-increasing instrumental part never fails to excite, as it provided an opportunity for the entire band to show off their playing quality. I, Like You was another new piece in which Steve Wilson played the lead guitar excellently..
With Home By The Sea, the tempo increased again. Maybe Ray Wilson will play the second part sometime? Land Of Confusion was another track that without a doubt everyone in the audience knew. The arrangement strongly resembles that of Genesis - with the exception of the violin, which set fine accents.
In The Air Tonight by Phil Collins started quietly and without a drum machine; the drums by Mario Koszel were then furious, and then the piece was played much rockier than the original. Alone again provided some calm, even cooling down, so to speak. The piece was announced, as usual, as the one that reminded Ray Wilson of his native Scotland. You Could Have Been Someone was another track from the current album, including clarinet playing in the intro.
With Another Cup Of Coffee by Mike + the Mechanics the finale of the concert was introduced. Similar to the beginning That's All, the audience was once again encouraged to clap along.
Wait For Better Days, another track from the album Chasing Rainbows, convinced with similar arrangement as in the studio version. Somehow fitting to the overall situation was the text: how could a resting optimism be better expressed than with "Be patient and be true and wait for better days"? Here the saxophone was once again used as a solo instrument - first soulfully, then dramatically increasing and finally loudly.
Solsbury Hill by Peter Gabriel was the crowning finale of the main part of the concert, accompanied as usual at Ray Wilson's concerts by Steve Wilson's 12-string guitar.
The band disappeared backstage for a few minutes after the piece, the hall was boiling, and the hoped-for encore was not long in coming.
The show continued with Congo, during whose extended intro Ray Wilson presented the band members individually and the audience gave them a thunderous applause.
This was followed by Inside - the track with which Stiltskin and thus Ray Wilson celebrated great success in the mid-nineties. The song is still rocking and has a lot of kick, although at the concert in Worpswede Ray Wilson was somewhere else in his mind during the first verse - in any case, it seemed as if he had forgotten the lyrics and had to improvise a bit. This showed: with all professionalism there are also things that are not perfect - and therefore special and likeable..
Not on the setlist, which was pasted on the stage floor by the musicians, were the last two pieces, which were obviously played spontaneously. These formed a fine finale after the faster, rockier numbers before. First, Knockin' On Heaven's Door by Bob Dylan took some of the tempo out. Mad World by Tears For Fears formed the quiet and also melancholic end of the setlist. "It's a very, very mad world." Indeed.
Everyone could be satisfied with the well-balanced setlist - both those who had come for the Genesis reference and those who had been looking forward to Ray Wilson's solo material in particular. Finding a balance between these two "extremes" when putting together a setlist is certainly not that easy due to the now huge repertoire of songs that Ray Wilson and his band have in their quiver. And it's also a challenge to find an appealing balance between the old and the new. Ray Wilson succeeded excellently in both on November 5, 2021 in Worpswede..
For someone who had been lucky enough to see Ray Wilson live several times - also in 2021 - the setlist didn't contain many surprises. However, it should be emphasized that four pieces from the current album were played, which has only happened a few times before. Because of that and because of the special circumstances the concert will remain in my memory very well..
The bottom line is that this was once again an excellent concert, for which the quite long journey was worth it, as always, and at the end of which many happy faces could be seen. And besides, it is great that the MusicHall in Worpswede has survived the long corona-induced dry spell and can offer its guests a great program again. Since the Ray Wilson concerts in Worpswede always take place in November or December and the days are short then, I have never been granted to see the artists' village once in daylight. Maybe next time: hopefully in 2022 and with pleasure again as great as this year!
Author: Sönke Bohm
Concert Photos: Christian Baltrusch
Ticket Photo: Sönke Bohm
Videos: Michaela Ix / Volker Warncke
Steve Hackett - Genesis Revisited II (2CD)
Double-album with new versions of Genesis classics and guest musicians such as Steve Wilson, Nik Kershaw, John Wetton, Steve Rothery or Simon Collins
Ray Wilson - Change (CD)
New Ray Wilson content
Music Hall Worpswede, 5 November 2021 - concert review
The Weight Of Man (2021) - info and review
Him, Like Us: Interview about The Weight Of Man, covid, brexit and live shows (2021)
Un Tour: Live From Home (videos)
Upon My Life - 2CD info and review


The Messerschmitt Me 163 was a rocket powered interceptor used by Germany during the final months of World War 2.
This Messerschmitt Me 163 article is a stub. You can help Fighter Aircraft Wiki by expanding it.
Of all aircraft engaged in World War ll the Me 163 Komet (Comet) was the most radical and, indeed, futuristic. The concept of the short-endurance local-defence interceptor powered by a rocket engine was certainly valid and might have been more of a thorn in the Allies' side than it was. Even the dramatically unconventional form of the Me 163. With no horizontal tail and an incredibly short fuselage. did not lead to great difficulty; in fact, the production fighter was widely held to have the best and safest characteristics of any aircraft in the Luftwaffe. But the swift strides into uncharted technology were bold in the extreme. It was partly to save weight and drag that the tailless configuration was adopted, and partly because the moving spirit behind the project was at first Dr Alex Lippisch. who liked tailless designs. Choice of two rocket propellants that reacted violently when they came into contact solved the problem of ignition in the combustion chamber but added an extremely large element of danger.
Moreover. the 163 had no landing gear, taking off from a jettisoned trolley and landing on a sprung skid, and the landing impact often sloshed residual propellants together causing a violent explosion. Many aircraft were lost this way. and the original test pilot. glider champion Heini Dittmar, was badly injured when the skid failed to extend. Nevertheless by 1944 these bat-like specks were swooping on US bomber formations with devastating effect. Numerous improved versions were flying at VE day, but only 370 Komets had seen service and these had suffered high attrition through accidents.
The roots of the project went back to the 1920s, with both Lippisch aerodynamics and the various rocket research projects that led to the Hellmuth Walter development of engines suitable for manned aircraft from 1936 It is worth emphasizing that nothing remotely like either the airframe or the engine was attempted in Britain, nor in any other country except the Soviet Union.
The early aircraft research was centred at the DFS (German sailplane research institute), where the first tailless rocket aircraft was planned as the DFS 194. In March 1938 the design was complete, but in January 1939 it was transferred to Messerschmitt. Shortly after this the Walter R l-203 rocket flew (very badly) in the He 176 research aircraft. Results with this aircraft were poor, but when a similar motor was fitted to the DFS 194 tailless aircraft the speed reached 342mph (55Okm/h) and climb was fantastic.
Swiftly sanction for a rocket fighter was gained, and gliding trials with the Me 163 V1 began in the spring of 1941. Again the tailless machine floated like a bird (the main snag being that instead of landing where the pilot wanted, it kept floating) and in July—September 1941 Dittmar pushed the speed under rocket power higher and higher, far beyond the world speed record until, on 2 October 1941, he reached about 1004km/h (623-85mph), a speed measured by theodolites on the ground. At all times the flight characteristics of all 163 versions were exemplary, but there were countless snags and catastrophes due to the dangerous propellants, the failure of hydraulics, the extreme difficulty of taking off exactly into wind on the unsprung dolly, and the equally rigorous constraints upon the pilot in landing. Everything had to be exactly right, because if the aircraft yawed, swung or ran too far on to rough ground, it would turn over and the propellants explode.
The final developments were the Me 163C, with fully retractable tail-wheel, long body of improved form, increased-span centre section and new motor with a small chamber to give 660lb (300kg) for cruising flight, and the derived Me 263.
Engine: One 3.75Olb (1700kg) thrust Walter HWK 509A-2 bi-propellant rocket burning concentrated hydrogen peroxide "(T-stoff) and hydrazine/methanol (C-stoff).
Dimensions: Span 30ft 7in (9.3m); length 18ft 8in (5.69m); height 9ft 0in (2.74m).
Weights: Empty 4,191 lb (1905kg); loaded 9,042|b (411Okg).
Performance: Maximum speed 596mph (960km/h) at 32.800fi (10,000m); initial climb 16.400ft (5000m)/min; service ceiling 54,000ft (16,500m); range depended greatly on flight profile but under 100km (62 miles); endurance 2%min from top of climb or eight min total.
Armament: Two 30mm MK 108 cannon in wing roots, each with 60 rounds.
History: First flight (Me 163V1) spring 1941 as glider. August 1941 under power; (Me 163B) August 1943; first operational unit (l/JG400) May 1944.


text:
Projects in Design Discourse
Writing Design Project
Designing Domesticity
National Identity & Globalization
The Hand Book
Design History / Design Heritage
The Design History Reader
Writing Design: Words and Objects
Design at Home
Iconic Designs
Designing Worlds
Reading Graphic Design
Anne L. Murphy
Barbara Brownie
Ciara Meehan
Claire Jamieson
DHeritage
DJ Huppatz
Daniel M. Goodbrey
Design Cultures
Design History Society
Grace Lees-Maffei
HREiR
Helen Casey
ICDHS
Iconicity
Identity redesign
Javier Gimeno-Martínez
Journal of Design History
Grace Lees-Maffei Professor of Design History
Jul 9 Encounters on the Shop Floor at the V&A
Conference, Hand, Event
At the end of June, I attended a remarkable 3-day symposium at the V&A, Encounters on the Shop Floor. It results from a research project the same name involving the V&A, Imperial College London, University College London (UCL), the Art Workers' Guild, the Royal College of Music, Tate and a group of independent artists, makers and performers. The project is housed at the V&A Research Institute (VARI) and is sponsored by the Andrew W. Mellon Foundation.
The symposium was opened by Tristram Hunt, Director of the V&A and introduced by project leader Dr Marta Ajmer (Deputy Director of VARI). According to Ajmar, and the project's promotional blurb, the symposium and the project from which it stems, aim to:
Make the knowledge of the maker explicit, and track its significance in learning and cognition
Champion its importance in education and society, and in all areas of practice, from art, design and science, [to] medicine and manufacture in challenging the divide between 'mind' and 'hand' and between 'intellectual' and 'manual' knowledge and their compartmentalisation
Model ways in which it can be effectively integrated into education
This stance is intended by the project team to address 'educational underperformance, social and economic inequality' and to inform 'socially and environmentally progressive industrial practices'. The project's methods include:
Methodological experimentation with multiple approaches
Collaborative interdisciplinary research in the form of Design Clusters
Educational modelling
The symposium in particular sought to 'develop strategies for recognising, showcasing and championing the value and usability of this knowledge within learning, the workplace and society and to propose a productive way forward' from multiple disciplinary contexts resulting, eventually, in a manifesto! Ajmar provided a foretaste of Professor Andrew Brewerton's (Plymouth College of Art) emphasis on 'making learning' and insistence that 'Making comes before knowing'.
Dr Marta Ajmar opening the symposium
Co-Investigator Prof Roger Kneebone (Faculty of Medicine, Imperial College), who has added to his several roles a new one as Professor of Anatomy at the Royal Academy of Art, talked about the term 'reciprocal illumination' coined by Gunther Kress and Kneebone in their collaboration. Ajmar, Kneebone and Kate Cowan all spoke fondly and extensively about Kress who had been due to participate in the conference but sadly died the week before. Kneebone lamented the challenges resulting from the fact that the school curriculum is being stripped of making, not only in the creative subjects but also in terms of any practical teaching in the sciences, for example. Kneebone was widely reported for lamenting the lack of sewing skills in his surgery students in October 2018.
He praised the work of Fleur Oakes, a 3D Embroiderer and Lacemaker who trained as a fine artist and fashion designer and is lacemaker in residence at St Mary's Hospital, part of Imperial College. Her work 'Textile Body' bridges textiles and surgery by replicating in cloth and thread the experience of rummaging inside a patients' body to perform a detailed surgical procedure, pushing body parts aside, not knowing what each part does, performing 'thread management' and focussing on very small physical details with a steady hand. 'Textile Body' represents the complexity of the body's interior - participants navigate parts they don't understand to find a tiny part and insert another one.
The first session, 'Challenging the Body/Mind Divide', began with Kate Cowan's (UCL Institute of Education, formerly V&A Research Institute) 'In Tribute to Gunther Kress'. Cowan first encountered Kress through his book Before Writing: Rethinking the Paths to Literacy (1997). She went on to work with him and made clear his enormous influence on her work, her entire field and many other varied fields too.
Cowan was followed by Mark Johnson (Philosophy Department, University of Oregon) who is perhaps best known for his book with George Lakoff, Metaphors We Live By (1980). At the symposium, Johnson spoke about 'Embodied Mind, Meaning, and Thought'. He described disembodied knowing as a 2700 year old tradition, and distinguished between 'knowing-that' which is supposedly objective and its subordinate 'knowing-how' which is not objective. Johnson explained that we will never be able to justify embodied knowing if we accept the construct of a mind-body division. However, he argued, all knowing is doing, an action for the transformation of experience, and therefore all knowing is embodied. Humans are makers and seekers of meaning, meaningfully engaging our environment. Linguistic meaning is parasitic upon and grows out of experience. Johnson cited the work of Antonio Damasio (Descartes' Error; Emotion, Reason and the Human Brain, 1994) on the organism-environment interaction, J.J. Gibson's theory of affordances (1979), philosopher John Dewey's view that objects are events with meaning and Don Tucker, neuroscientist with whom he is writing a book about embodied knowing.
In the afternoon, Paul Craddock (Research Film Maker, V&A Research Institute and UCL Medical School) described his work filming for the Encounters Project. Academic journals do not publish research films, with the exception of the Journal of Embodied Research. Yet, useful knowledge is to be gained from research films such as Craddock's. For example he filmed potter Julian Stair at his wheel showing how he creates a firm triangular form with his left elbow on his left thigh, and his right elbow on his right thigh, leaning forward to brace for steadiness, and then this hands come together and work in partnership, rarely separating. This triangular form is also seen in Pétur Jónasson's (Royal College of Music) guitar playing. Stair and Jónasson have worked together for the Encounters Project Investigating Touch and their commonalities have been further revealed.
Julian Stair and Pétur Jónasson showing a film of themselves watching a film of themselves making a pot and playing a guitar respectively #encountersontheshopfloor pic.twitter.com/fwmihlxUJo
— Prof Dr Grace Lees-Maffei (@graceleesmaffei) June 26, 2019
Carey Jewitt (UCL Institute of Education) spoke about 'In-Touch: Exploring touch through touchy, felt-experiences and processes of making' stating that touch research is still emergent, perhaps because it is hard to access multimodal and sensorial experiences, but we need to look at socio-technological imaginaries, beyond the arrival of the smartphone.
Tamar Makin and Danielle Clode (Institute of Cognitive Neuroscience, UCL) discussed 'How the Body and the Brain Adapt to Material Change: An interdisciplinary perspective from neuroscience and design'. Dani Clode studied MA Design Products at the Royal College of Art. For her Alternative Limb project she made three prostheses for model Kelly Knox who was born without one of her hands: one with a pulse that reflects the shape of her arm, one assembled from a variety of different materials, and one like a worm or tail. Prosthetics extend a person's physical ability. The Third Thumb is symmetrically positioned across from the biological thumb and controlled by the user's feet. Drivers in cars, and users of sewing machines, electric guitars and drums all use their feet to assist the hands: it is normal to do so in these contexts. The Third Thumb was protoyped with flexible 3D filament. Users train for two hours a day to develop their skills and increase their proprioception of the thumb. Close demonstrated the Third Thumb in a V&A gallery after her talk.
Aldo Faisal (Faculty of Engineering and Brain and Behaviour Lab, Imperial College London) spoke to the title 'Putting the Human back into the Loop with Neurotechnology'. It takes 1000 hours to learn how to nap a flint hand axe for an individual but it took a million years for the human race to learn how to produce hand axes. Today we can offload parts of the mind and body to technology.
A session titled 'The Thinking Hand: Histories and Practices' was chaired by Elaine Tierney (V&A Research Institute) and began with Simona Valeriani (V&A Research Institute) talking about models which were used to make visible and tangible chemical structures at the molecular level, architectural models which were used for planning, and how physical models are still In use in the twenty-first century but digital models are becoming more prevalent.
Next, Haidy Geismar (Department of Anthropology, UCL), Pip Laurenson (Research Department, Tate and Maastricht University) and Catherine Yass (Artist) talked about their Encounters Project 'Obsolescence, Precarity, Persistence: The social world of embodied knowledge in contemporary art photography'. Yass has spent her career as a photographer navigating technical changes and changes in film stock. She has stockpiled the last of her favoured film stock in a fridge in her studio. She uses the Bayeux lab in Fitzrovia, which has technicians who have developed social skills, good communication, and understand that excellent printing results from developing a strong personal relationship with the photographer. They also use skill to maintain obsolete equipment, software and hardware no longer maintained by their manufacturers.
The second day of the symposium began with a session chaired by Prof Lynda Nead (Department of History of Art and Screen Media, Birkbeck, University of London) featuring Prof Tim Ingold (Department of Anthropology, University of Aberdeen) and Prof Pamela Smith (Department of History, Columbia University). Ingold talked about 'Making Growing Learning'. He asserted that no knowledge of practical work is transmitted. It is a myth that a body of knowledge is passed from one head and transmitted through observation to another. Practical instruction as a kind of copying is not a downward transmission, but two overlapping parallel activities. Ingold insisted that there is no link between creativity and copying nor between creativity and innovation. He used the example of there being no more creative thing than having a baby, but that is not an innovation. In every generation knowledge is being regenerated, rediscovered anew.
Ingold is becoming more sceptical of the notion of embodiment. It is misused in academia as a way of avoiding accusations of Cartesianism. The word 'embodied' and the prefix 'em' implies that something is taken into the body, and subsumed very deeply so that the poor craftsperson can't speak about what they do, which is not the case as craftspeople speak endlessly about what they do. But rather than taking things in, we are constantly pouring things out. Making things is not so different from growing things. We don't impose a plan on materials but join with them in making something. Making is transforming materials from one life and taking them into another life.
Smith leads the Making and Knowing Project in the Department of History at Columbia. Ajmar had told us previously that she has been collaborating in this project, reconstructing C16th varnishes, and renaissance wood inlay (intarsia). This material experience has radically transformed Ajmar's understanding of the technique including the breakages made by her unthinking hand and has allowed her to regard woodworm as a co-worker. The Making and Knowing project starts from the fact that from 1400 craftspeople began to write down their techniques (previously books were written exclusively by scholars). By the mid-sixteenth century lots of how-to books were available. They took the form of collections of recipes for how to do things, rather than a linear narrative. Examples are Cellini's treatise on gold/silversmithing and Nicholas Hilliard's The Art of Limning, in which he writes that the best way to learn to draw is to get an artist to show you. Leonardo, similarly, noted of his dissections, '... the more minutely your describes it, the more you will confound the mind of the reader.' From 2014-19, the Making and knowing project has delivered :
I. Text workshops,
II. Graduate lab seminars - to research and reconstruct the recipes in the mss
II. Working group meetings
iv. Digital development of a manuscript
It foregrounded craft making and scientific knowing, collaboration between the humanities and science, skill building, embodied knowledge, sensory tools and experience markers. For example in an early modern recipe a paste is described as having the texture of mustard and the same text also contains a recipe for mustard so a student made the mustard as a way of learning about the what the texture of the paste should be. The students developed a squeeze test which they passed down from student cohort to cohort across the life of the project. During the project, students became accustomed to learning through failure, which they had not previously experienced. Smith argues that hands-on learning, hands-on experimental history should be extended to all levels of learning. Ingold responded that treating graduate students as researchers, helps to get away from the idea that you are a pedagogue.
A panel titled Making Futures I: The Thinking Hand in Industry chaired by Sarah Green (V&A East) saw Julian Stair return to the stage in conversation with Peter Zinck (Petersen Tegl A/S, Denmark). Zinc is part of a family firm of brick makers Petesen Tegl A/S, Denmark, which imports clays to offer a range of colours, fires using charcoal for a variegated effect and makes bricks using a combination of hand and machine techniques to provide bespoke bricks https://en.petersen-tegl.dk/company-profile/our-history/ …
Peter Zinck wearing a jacket printed with bricks and talking about bricks and handing around bricks for the audience to feel @V_and_A #encountersontheshopfloor pic.twitter.com/5FBQdnpnnV
Next, Making Futures II: Making for a Purpose was a conversation with Tomas Diez (Fab Academy, Fab Foundation, Fab Lab Barcelona) and Daniel Charny (Design, Kingston School of Art; Fixperts, Kingston School of Art and FixEd). Diez talked about Fab Lab with great optimism. Charny talked about the Power of Making exhibition at the V&A which was commissioned by the V&A from Charny to explore 'the trace of the hand' but he objected to the phrase because it implied the end of something. Instead he shifted the focus to making, which was difficult to get V&A and crafts council to agree to. He promoted the work of Fixperts, which offers teacher resources and 600 films online.
Tackling the global challenges through making, in the red shoes the apparent optimist Tomas Diaz @fablabbcn & in the blue shoes the very worried @danino @Fixperts #EncountersOnTheShopFloor pic.twitter.com/Zga8ES7kiL
The two final panels of the symposium's central day addressed The Thinking Hand in Science and Medicine respectively and were chaired by Joanna Norman (Director of the V&A Research Institute). Conversation 1: Science featured Kneebone, Alan Spivey (Department of Chemistry, Imperial College London), Luke Delmas (Department of Chemistry, Imperial College London), Stephen Ramsey (Retired Scientific Glassblower, Imperial College London), and Ian Needleman (UCL Eastman Dental Institute). We learned that there is a crisis of reproducibility in science where scientists are unable to reproduce one another's results even in the same institutions. This is partly a result of the ways in which research is reported. The difficulties of, for example, distilling, are not explained in journal articles, which simply refer to distilling without detailing the specific method used. Another example is found in the partnership between scientists and academic glassblowers. Luke Delmas talking about using glass taps in his chemistry experiments and how he learned how to turn them gently to control the amount of gas let in. Students who are learning their skills can just turn them wide open and can ruin an experiment in the process. Kneebone explained that in surgery you don't only use your hands, you use your whole body. Another problem in contemporary science is the focus on outputs rather than processes. Videos of experiments are helpful in facilitating reproducibility.
Now at #EncountersOnTheShopFloor @V_and_A a manel (all male panel) on the subject of the thinking hand in science introduced by @RogerKneebone pic.twitter.com/nJipyO1qya
Conversation 2: Medicine, again led by Kneebone this time with Chris Peters (Faculty of Medicine, Imperial College London), Fleur Oakes (Three-Dimensional Embroiderer and Lacemaker), Will Houstoun (Magician, Imperial College, RCM Centre for Performance Science), and Rachel Warr (Puppeteer and Dramaturg). Chris Peters explained that there are three kinds of surgery:
Open surgery
Laparoscopic surgery using a keyhole cut into the patient with instruments pushed through it, pivoting on the body's wall
Robotic surgery, using a computer, which need not be in the same room, but are designed to offer haptic feedback.
These make different physical and intellectual demands on the surgeon. Peters also talked about the communication skills needed in surgery and consultancy. He has developed a technique for giving bad news:
A warning shot
Use three points at most, as this is all that shocked patients or relatives will take in and remember
Tell a story, take patients through the stages of the process from the beginning
Be unambiguous
Will Houston, magician, controls the viewer's attention through his own attention: when he looks at his hand, or a handkerchief, or other prop, the audience looks at it. When he looks at the audience they look at him.
The final session on Thursday was a practical one in Gallery 220, dedicated to Sharing the Knowledge of the Maker. It showcased the work of the participants in the preceding Science and Medicine panels along with Prue Cooper (Potter, Art Workers Guild), Rachael Matthews (Textile Artist, Art Workers Guild), Samantha Gallivan (Orthopaedic Surgeon, Imperial College London), Keith Frederick (Puppeteer - see the image of his materials at the top of this post), Malek Racy (Orthopaedic Surgeon, Imperial College London) and Paul Jakeman (Stone Carver, City and Guilds of London Art School). They were grouped according to 'Hard materials, sharp tools', 'Small-scale working', 'Dexterity and manipulation' and 'Working with precious materials'. A reception in the Silver Galleries followed.
On the final day, the conference turned to pedagogy. Helen Charman (Learning and National Programmes, V&A) talked about her several decades' experience in museum education at the Design Museum and now the V&A. Professor Andrew Brewerton (Plymouth College of Art) talked about his experience of leading Plymouth College of Art and setting up Plymouth School of Creative Arts focussed on creativity and food skills, which has this year been judged as inadequate by Ofsted. Jackie Marsh (School of Education, Sheffield University) described her formative experience with 'makerspaces', noticing the lack of girls and young women. She has undertaken a major project on 'Makerspaces in Formal and Non-Formal Learning Spaces: Principles of practice' in order to provide more equitable impact in and from these environments.
The final session was chaired by Jack Tindale (Policy Connect). Kate Cowan (UCL Institute of Education, formerly V&A Research Institute) and Rebecca Goozee (formerly V&A Research Institute) talked about 'Valuing Embodied Ways of Knowing: Multimodal perspectives on teaching and learning in schools and museums'. Goozee shared her despair about a generation of children missing out on making because of curriculum and funding changes. Sara Price (UCL Institute of Education) followed with 'Embodying Science: Meaning making around interactions in informal science settings'.
The last word was given to Professor David Kirsh (Cognitive Science Department, University of California, San Diego) who provided a fascinating account of how dancers use 'marking', a kind of abbreviated enactment, to learn, remember and practice their dance phrases. Research supports the supposition that marking has benefits in terms of improved performance that visualisation does not provide. Kirsh demonstrated therefore that 'We Use Our Bodies to Think'.
At the closing round table and discussion, 'Where to Now?' many of the speakers were invited to briefly state their manifesto. I perceived an unfortunate split in which makers such as Julian Stair asserted their distinction from academia in a highly critical way. One respondent in the Q&A said 'I am on the side of the makers'. The binarism embedded in this phrase was inappropriate at the close of a symposium arising from a project which is all about interdisciplinary, multidisciplinary and bringing people together for 'reciprocal illumination'.
Prof Dr Grace Lees-Maffei
RT @haidygeismar: A good summary of the #encountersontheshopfloor conference @V_and_A which I was lucky to be a part of. https://t.co/0tkTc…
Haidy Geismar
A good summary of the #encountersontheshopfloor conference @V_and_A which I was lucky to be a part of. https://t.co/0tkTc7Rv0C
Read my summary of June's @V_and_A #encountersontheshopfloor @martaajmar @RogerKneebone @TristramHuntVA @katecowan… https://t.co/pLIwGTdaGc
Daniel Charny
RT @c_j_d: We need a radical new approach to thinking about the future of making and where it sits within the curriculum, says @danino of @…
Fixperts
Hands, Handling, Hand, handmade, Conference
Guns and Gloves: The Cost[s] of Design
@gracelemaf
Jul 18 Guns and Gloves: The Cost[s] of Design
Jun 18 Celebrating DHeritage Student Publication Success
Nov 4 The Hand Book
Dec 11 A Scientific Advisor for the Hand Project
Jan 11 Public Engagement, Impact and The Hand Book
In pictures: New Unesco World Heritage Sites https://t.co/3H4kbwCXbK


text:
Home Books Newsletter Blog Contact About Cheri
The Case of the Lady in the Luggage
Ellie Tappet Cruise Ship Mysteries, Book 4
Kindle Unlimited, Cozy, Mystery
How many Tappets does it take to solve a murder? When Ellie's kids surprise her by coming aboard the S.V. Adventurous Spirit she couldn't be more thrilled. She's missed them so much, especially her sweet granddaughter Clara. And it's time to introduce the family to the new man in her life. That is, if she can stop chickening out long enough to spill the beans.
Meanwhile, Ellie's friend Violet is having an unexpected reunion of her own. Violet's long-lost love has come aboard the ship on the arm of a new beau, and the resulting drama is raising eyebrows all over the ship. But emotional baggage takes second place to murder when a dead body is found on Violet's ex's doorstep!
Ellie's on the hunt, but between the dead woman's unusual past, an unorthodox murder weapon gone missing, and the involvement of a visiting magician and his parrot, this mystery is starting to feel like a three-ring circus! Make yourself some popcorn and settle in for the show, because Ellie Tappet, along with her family and friends, are about to perform some crime-solving magic of their own.
Amazon Kindle Kindle Unlimited
Amazon Barnes and Noble
Ellie Tappet Cruise Ship Mysteries
Privacy Policy Copyright (c) 2020 Adventurous Ink LLC, All Rights Reserved Terms & Conditions


Don Kohler had a friend who worked on the Geneva Hospital ambulance crew. Since Kohler was one of three full-time reporters for the Geneva Daily Post-Gazette, he was used to getting calls about stories at odd hours. Sometimes, the tips were better than others; the Saturday evening phone call tipping him to the story of the crippled girl saving a farmer's life caused him to gladly drive out to Willow Lake the next day.
Kohler's story made the wire service, and with a picture of Judy and Candybar and the corn planter, figured prominently on the Post-Gazette's front page Monday evening.
At school the next day, Judy found that she had become a minor celebrity for the second time in ten days. People who had hardly spoken to her in all her years in high school went out of the way to say something complimentary; she was pleased at the attention, if a bit embarrassed by it.
As she and Ken sat down to what had become their regular lunch in the cafeteria, her first words were to ask how his father was doing.
"Pretty well, considering," Ken replied. "He'd like to see you."
"I'm glad to hear he's getting along all right," Judy said.
"What I was thinking, was that since we didn't get your therapy session in at the Y on Saturday, maybe we could go tonight, and stop off and see him."
"I'd love to, Ken," she told him. "But aren't you going to be busy with farm work?"
Shaking his head, he replied, "There's work to be done, but after Saturday, no one will complain if I take off to take you to town."
"You know," she reflected, "It's kind of nice to be appreciated, but what with the newspaper story and all, I kind of think that people are making too much fuss over what I did. After all, I just did what had to be done, and there was no one else there to do it."
Ken nodded. "And you did the right thing, and so fast you hardly had time to think about it. Now, if you put my sister-in-law Carolyn in the same position you were in, I'd be going to a funeral today."
A glaze came over Judy's eyes as she thought about what Ken had said. Though she was too shy to admit it, she was a little amazed that she had done everything she had remembered doing a few days before.
When Ken, his mother and brother had taken her home Saturday night, dirty and covered with blood, her mother acted as if she were about to have a heart attack. Even when the situation was explained, Irene had been pleased that her daughter had been so heroic, but upset that she had been riding Candybar in the first place.
Judy's father had made what her mother said seem unimportant. After hearing the story, he took Judith in his arms and said, "I knew I had a special girl. It all worked out for the best."
Ken drove Judy home from school to get her gym bag for the trip to town. She had no more than gotten inside when Irene confronted her, saying, "Judith, what trouble are you planning on getting into with the Sorensen boy this time?"
"We're just going in to see his father, and then to the Y," Judith replied.
"I don't know about you and him," Irene said. "Whenever you go out with him, you do things you shouldn't be doing, and you tire yourself out. You're too fragile to be doing the things you do with him! What will your father say when he gets home?"
"We'll take it easy," Judith insisted. "We'll just go to the hospital, and then to the therapy session."
"Well, stay off that horse," Irene ordered.
Judy stiffened. Trust her mother to bring her down when she was feeling good about herself for one! "I will if I want to. I know what I can do!" Judith replied firmly, with just a trace of tension in her voice. "I'm no little girl any longer."
"You may have grown up some," Irene said angrily, "But you still don't know what you can do and what you can't!"
Judy picked up her gym bag from where it lay discarded from Saturday night. "How would you know what I can do? You don't even watch me in my therapy sessions. At least I know where I'm strong and where I'm weak."
"Oh, darling," Irene said, wondering if it had been the influence of the Sorensen boy that had made her normally docile little girl so upset. "You know I can't bear to watch you torture yourself in those sessions. You're too weak for that. I mean, I realize you want to walk again, but..."
"That's what I mean," Judy said, not giving in for once. "Riding Candybar is about as tiring as watching grass grow, but you wouldn't know that. I wouldn't have known it either if I hadn't tried."
"Yes, Judith," her mother protested. "But you could fall off the horse and hurt yourself, or it could run off with you and you couldn't control it."
"I don't think Candybar would run wild if you lit a firecracker under her tail," Judith replied, opening the door. "I'm going to Geneva with Ken. We'll probably have supper in town. I'll see you later."
Ken's father was propped up in bed, his leg in traction, when Ken and Judy found him. Ken could see that he was considerably better than he had been the day before, when the effects of the blood he had lost, combined with the pain of his crushed knee, had made him barely able to speak.
When he saw Judy, he broke into a big smile. He motioned her over to the bedside and took her hand, held it firmly, and said, "They tell me you're the reason why I got here."
Judy leaned forward on her crutches a little, and shyly admitted that she had something to do with it.
"I know you did," Chet told her. "I remember that hitch falling on me, and I sort of remember you yelling at me to hold onto something, but I didn't really find out until today what you did."
He stopped for a moment to gather his strength; Ken could see that his father was weaker than he looked. Judy said softly, "I just couldn't leave you laying there bleeding."
"I just don't know how to thank you," Chet said finally, then went on in an intense, though weak voice. "I don't know how to say this, but I'm glad you're being crippled doesn't keep you from being one mighty fine person."
Judy had been hearing praise for a couple days, but this really counted. "Thank you," she said, squeezing his hand.
The bedridden man turned to face Ken and said, "You know what I said about your Uncle Ed?" Ken nodded, and Chet went on, "Well, I was wrong."
Later, as they rode across town to the YMCA, Judy asked, "What was that about your Uncle Ed?"
Ken thought for a moment. There was a message in what his father had said, and he wanted time to digest it. "It's his way of telling me that he really thinks you're all right," he said, truthfully, after a moment.
"Well, I hope he'll be all right," Judy responded slowly.
"You don't think he will be?"
"Come on, Ken. He's got a crushed knee. He's what? In his fifties?"
"I hope I'm wrong," she said, "But I'd be surprised if he didn't take a long time healing. You'd better be getting some crutches, too. I'll bet you he'll need them."
"I don't understand why your physical therapy is here," Ken said as Judy came out of the locker room, dressed in a pink and white striped leotard with white tights.
"It's a long story," she replied as she worked her way over to an exercise machine. As she began her workout, she started explaining.
Physical therapy had been a way of life for Judy for ten years, now. Since Dohrman County Hospital in Geneva had only the most rudimentary physical therapy facilities, for many years the only alternative had been to go to St. Catherine's hospital in Camden. Not only was this expensive, it was a long drive for three times or more a week. Still, the therapy was necessary if there was any hope of her ever walking again, since muscles in her legs needed to be kept exercised so they wouldn't atrophy.
"About the time they got all the modern cam exercise machines here at the Y," Judy explained, "Beth got married and moved up here. You remember, the woman that taught us how to dance. She was one of my physical therapists in Camden, and we worked out routines on the equipment here that work about as well as what I can do in Camden. Now, I only go down to St. Catherine's every couple months, so they can check up on my progress. It makes everything so much easier."
As Judy worked out, Ken watched, interested in the proceedings. The leotard and tights gave Ken his first look at the shape of Judy's legs. Both her upper legs merely looked skinny, though there was more musculature on the front than on the back. From the knees on down, though, her legs seemed positively withered, so bony that the looked like a case of extreme starvation. Ken could see why he'd always seen Judy wearing pants or a long dress.
It seemed to him that the workouts concentrated as much on Judy's upper body as on her withered legs, and he commented on this.
"If you had to use your arms for as much as I have to," she told him, "You'd want them strong."
Even with the strapless gown Judy had worn to the prom, Ken hadn't been aware of just how well developed the muscles of Judy's upper body were, though now that he thought about it, he could remember how firmly she had held him. Watching her work out, he could see that Judy was no weakling. The strength of her arms was very impressive. Moreover, he could see that she really worked at her workouts; within minutes, the sweat was rolling off her face.
Judy moved from machine to machine, to concentrate on specific parts of her body. At times, Judy asked Ken to help with a routine, such as holding her knees down while she did situps, or lifting her to a horizontal bar, where he was surprised to see her chinning herself one-handed, using either hand. As the workout went on, Ken began to wonder just how strong Judy was. Toward the end of her workout, she was working out on a weight bench. After a few minutes of bench presses, she sat up, ready to go on to the next activity.
"Would you stay there for a moment?" he asked.
"You'll see." Ken called a training room attendant over, and the two of them began fastening weights onto the weight bar, Ken keeping track of the total. After a few minutes, the bar was ready. Judy looked up apprehensively at all the weight. "Let's see if you can lift that," Ken said, as he and the attendant stood at either end of the bar to keep it from falling if it should slip.
"I don't know," Judy frowned. She wiped her hands as best she could on her sweaty leotard, and carefully took a solid grip on the bar. Her muscles bulged with the strain; she gritted her teeth until her face became a grimace as she pushed upward.
All of a sudden, a muffled grunt came from deep within her, and the weight moved upward. She got it out to arm's length for a moment before the strain became too much; as the bar dropped, Ken and the attendant guided it into the holders.
She lay panting on the bench, the sweat still rolling off her brow. "That was almost too much," she managed finally. "How much was that?"
"Two hundred forty pounds," Ken said.
"Tom and I drug the corn planter down to the scales at the feed mill after school yesterday," Ken explained. "That's the weight you lifted off of Dad's knee. I just wanted to see for myself."
"This seemed heavier. A lot heavier," she said slowly.
"So what?" Ken shrugged. "You're tired now, and you were excited then. Judy, I am impressed. I couldn't do that. There's more to you than meets the eye."
In the locker room a few minutes later, Judy could feel her muscles aching. The pool would feel good, she knew, even though she would be even more tired after her swim. Her leotard had been clean an hour before; now it stank so bad she could hardly stand to touch it to take it off and cram it into a plastic bag so it wouldn't foul her gym bag.


If you're nodding, welcome to the club -- not one I'm proud to be a member of, but certainly one I have long standing in. From the time I look in the mirror in the morning ("Ugh, I really wish my stomach was flatter / torso was longer / skin was clearer...") to way too many times throughout the day ("I rushed out of the house too fast and didn't hug my daughter tightly enough / I could have done that investor call better / my lunch should have been healthier...."), self-criticism is an ongoing track in my head. It's terrible, really, but every time I mention it to a friend, I see the nod that tells me I'm not alone.
The other day I was doing some shopping with my daughter and tried on a dress. She was in the dressing room with me when I started to turn around to analyze -- well, let's be honest, criticize -- the way I looked in it from all angles. I try to mute my self-criticism when my daughter is around so as not to set a terrible example, but before I even knew what was happening the words were coming out of my mouth: "I don't have the body for this..."
My daughter interrupted me: "Mama! The dress looks awesome -- and even if you don't love it, which is cool, isn't there something you DO like about it? If you were with your friend, you'd probably start with that first, so how come when it's you, you point out something negative?"
It was a classic moment of "kids speak the truth" meets "when did you get so smart and mature and OMG I can't believe this is my child who is being so grown up!" She was beyond right. When it comes to ourselves, we're super-quick to find flaws, issues, negatives, and failures. When it comes to our friends, we focus on the good stuff first, even when we're giving constructive criticism.
What if we put our thoughts and judgements about ourselves through that same filter? A filter of positivity: "Would I say this to a friend?" Would we be kinder, nicer, more gentle to ourselves? What would we lose if we gave up the title of harshest self-critic and instead, treated ourselves the same way we would treat others we love in our lives?
One of the most powerful meditations I've ever done is called Love and Kindness Meditation. (I'm a total novice at meditating, still trying to learn to do it, and tried this one at a yoga class once.) It's a practice of directing positive feelings, wishes, and emotions towards people in your life...and it starts by directing them towards yourself. We can't be awesome humans to others if we are not awesome humans to ourselves -- and there is tons of scientific research demonstrating the health and well-being benefits of Love and Kindness Meditation.
Maybe you'll give Love and Kindness Meditation a try. But maybe even before that you'll consider what my daughter inspired me to start doing -- to put at least some of your thoughts about yourself through a simple filter of: Would I say this to a friend? Like me, I think you'll notice a huge shift in how you talk to yourself and, in time, you'll become kinder and gentler to the awesome human that you already are.


text:
<?php

/*
This file is part of moses.  Its use is licensed under the GNU Lesser General
Public License version 2.1 or, at your option, any later version.
*/

function sgviz($sentence) {
  global $setup,$dir,$id,$set;
?><title>Search Graph Visualization, Sentence <?php $sentence ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<svg id="sg" height="500" width="900" xmlns="http://www.w3.org/2000/svg"><g id="chart"></g></svg>

<?php
// read graph
//$file = get_current_analysis_filename("basic","search-graph")."/graph.$sentence";
//$handle = fopen($file,"r");
//while (($line = fgets($handle)) !== false) {
//  $e = explode("\t",addslashes(chop($line)));
//  print "edge[$e[0]]=new Array($e[1],$e[2],$e[3],\"$e[4]\",\"$e[5]\",\"$e[6]\",$e[7],$e[8],$e[9],\"$e[10]\");\n";
//}
//fclose($handle);
}

function sgviz_data($sentence) {
  header('Content-type: application/json');
  $file = get_current_analysis_filename("basic","search-graph")."/graph.$sentence";

  $handle = fopen($file,"r");
  while (($line = fgets($handle)) !== false) {
    $e = explode("\t",addslashes(chop($line)));
    $edge[$e[0]] = array($e[1],$e[2],$e[3],$e[4],$e[5],$e[6],$e[7],$e[8],$e[9],$e[10]);
  }
  $return['edge'] = $edge;
  print json_encode($return);
  exit();
}