text:
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Neo.IO;
using Neo.SmartContract;
using System.IO;

namespace Neo.UnitTests.Ledger
{
    [TestClass]
    public class UT_StorageKey
    {
        StorageKey uut;

        [TestInitialize]
        public void TestSetup()
        {
            uut = new StorageKey();
        }

        [TestMethod]
        public void Id_Get()
        {
            uut.Id.Should().Be(0);
        }

        [TestMethod]
        public void Size()
        {
            var ut = new StorageKey() { Key = new byte[17], Id = 0 };
            ut.ToArray().Length.Should().Be(((ISerializable)ut).Size);

            ut = new StorageKey() { Key = new byte[0], Id = 0 };
            ut.ToArray().Length.Should().Be(((ISerializable)ut).Size);

            ut = new StorageKey() { Key = new byte[16], Id = 0 };
            ut.ToArray().Length.Should().Be(((ISerializable)ut).Size);
        }

        [TestMethod]
        public void Id_Set()
        {
            int val = 1;
            uut.Id = val;
            uut.Id.Should().Be(val);
        }

        [TestMethod]
        public void Key_Get()
        {
            uut.Key.Should().BeNull();
        }

        [TestMethod]
        public void Key_Set()
        {
            byte[] val = new byte[] { 0x42, 0x32 };
            uut.Key = val;
            uut.Key.Length.Should().Be(2);
            uut.Key[0].Should().Be(val[0]);
            uut.Key[1].Should().Be(val[1]);
        }

        [TestMethod]
        public void Equals_SameObj()
        {
            uut.Equals(uut).Should().BeTrue();
        }

        [TestMethod]
        public void Equals_Null()
        {
            uut.Equals(null).Should().BeFalse();
        }

        [TestMethod]
        public void Equals_SameHash_SameKey()
        {
            int val = 0x42000000;
            byte[] keyVal = TestUtils.GetByteArray(10, 0x42);
            StorageKey newSk = new StorageKey
            {
                Id = val,
                Key = keyVal
            };
            uut.Id = val;
            uut.Key = keyVal;

            uut.Equals(newSk).Should().BeTrue();
        }

        [TestMethod]
        public void Equals_DiffHash_SameKey()
        {
            int val = 0x42000000;
            byte[] keyVal = TestUtils.GetByteArray(10, 0x42);
            StorageKey newSk = new StorageKey
            {
                Id = val,
                Key = keyVal
            };
            uut.Id = 0x78000000;
            uut.Key = keyVal;

            uut.Equals(newSk).Should().BeFalse();
        }

        [TestMethod]
        public void Equals_SameHash_DiffKey()
        {
            int val = 0x42000000;
            byte[] keyVal = TestUtils.GetByteArray(10, 0x42);
            StorageKey newSk = new StorageKey
            {
                Id = val,
                Key = keyVal
            };
            uut.Id = val;
            uut.Key = TestUtils.GetByteArray(10, 0x88);

            uut.Equals(newSk).Should().BeFalse();
        }

        [TestMethod]
        public void GetHashCode_Get()
        {
            uut.Id = 0x42000000;
            uut.Key = TestUtils.GetByteArray(10, 0x42);
            uut.GetHashCode().Should().Be(1374529787);
        }

        [TestMethod]
        public void Equals_Obj()
        {
            uut.Equals(1u).Should().BeFalse();
            uut.Equals((object)uut).Should().BeTrue();
        }

        [TestMethod]
        public void TestDeserialize()
        {
            using (MemoryStream ms = new MemoryStream(1024))
            using (BinaryWriter writer = new BinaryWriter(ms))
            using (BinaryReader reader = new BinaryReader(ms))
            {
                uut.Id = 0x42000000;
                uut.Key = TestUtils.GetByteArray(10, 0x42);
                ((ISerializable)uut).Serialize(writer);
                ms.Seek(0, SeekOrigin.Begin);
                StorageKey dest = new StorageKey();
                ((ISerializable)dest).Deserialize(reader);
                dest.Id.Should().Be(uut.Id);
                dest.Key.Should().BeEquivalentTo(uut.Key);
            }
        }
    }
}


text:
'use strict';

var express = require('express');
var bodyParser = require('body-parser');
var routes = require('./app/routes/index.js');
var mongoose = require('mongoose');
var passport = require('passport');
var session = require('express-session');
var request = require('request');

var app = express();
// require('dotenv').load();
require('./app/config/passport')(passport);

mongoose.connect(process.env.MONGODB_URI);
mongoose.Promise = global.Promise;

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use('/controllers', express.static(process.cwd() + '/app/controllers'));
app.use('/public', express.static(process.cwd() + '/public'));
app.use('/common', express.static(process.cwd() + '/app/common'));

app.use(session({
    secret: 'secretClementine',
    resave: false,
    saveUninitialized: true
}));

app.use(passport.initialize());
app.use(passport.session());

routes(app, passport, request);

var port = process.env.PORT || 8080;
app.listen(port, function() {
    console.log('Node.js listening on port ' + port + '...');
});

redpajama_set_name: RedPajamaGithub


text:
package org.waveprotocol.wave.model.operation.wave;

import org.waveprotocol.wave.model.wave.ParticipantId;

import java.util.Collections;
import java.util.List;

/**
 * A wavelet delta is a collection of {@link WaveletOperation}s from a single author.
 *
 *
 */
public class WaveletDelta {
  /** Author of the operations. */
  private final ParticipantId author;

  /** List of operations in the order they are to be applied. */
  private final List<? extends WaveletOperation> ops;

  /**
   * Create new delta from an author and a list of operations.
   *
   * @param author of the operations
   * @param ops list of operations
   */
  public WaveletDelta(ParticipantId author, List<? extends WaveletOperation> ops) {
    this.author = author;
    this.ops = ops;
  }

  public ParticipantId getAuthor() {
    return author;
  }

  /**
   * @return immutable list of the list of operations
   */
  public List<WaveletOperation> getOperations() {
    return Collections.unmodifiableList(ops);
  }

  @Override
  public int hashCode() {
    // (see Effective Java)
    int result = 17;

    result = 31 * result + author.hashCode();
    for (WaveletOperation op : ops) {
      result = 31 * result + op.hashCode();
    }

    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj instanceof WaveletDelta) {
      WaveletDelta wd = (WaveletDelta) obj;
      return author.equals(wd.author) && ops.equals(wd.ops);
    } else {
      return false;
    }
  }

  @Override
  public String toString() {
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("WaveletDelta(" + author + ",");
    if (ops.isEmpty()) {
      stringBuilder.append("[]");
    } else {
      stringBuilder.append(" " + ops.size() + " ops: [" + ops.get(0));
      for (int i = 1; i < ops.size(); i++) {
        stringBuilder.append("," + ops.get(i));
      }
      stringBuilder.append("]");
    }
    stringBuilder.append(")");
    return stringBuilder.toString();
  }
}


text:
SELECT act.proc_inst_id_ as "ProcessInstanceId", def.name_ as "Name", act.start_time_ as "ActivityStartTime",  age(now()::timestamp, act.start_time_) as "ElapsedTime",
act.act_name_ as "ActivityName", act.act_type_ as "ActivityType"
FROM public.act_hi_actinst act
INNER JOIN public.act_re_procdef def ON act.proc_def_id_ =  def.id_
INNER JOIN public.act_ru_execution ex ON act.proc_inst_id_ = ex.proc_inst_id_
WHERE act.end_time_ IS NULL AND ex.is_active_ = true
ORDER BY act.start_time_ DESC;


text:
#ifndef MAKEFILE_HPP_
#define MAKEFILE_HPP_
#include <string>
#include <vector>
#include <iostream>
#include "Target.hpp"
#include "FileManager.hpp"
#include "FileInterpreter.hpp"
#include "Variable.hpp"

class MakeFile {

 public:

	MakeFile(std::string path) {
		_path = path;
		FileManager* file = FileManager::get_singleton();
		file->set_path(_path);

		FileInterpreter fi = FileInterpreter();
		std::vector<Target> temporary;
		std::vector<Variable> tempVariables;
		fi.parseFile(&temporary, &tempVariables);
		_listTarget = temporary;
		_listVariable = tempVariables;
	}

	MakeFile(std::string path, bool overwrite) {
		_path = path;
		FileManager* file = FileManager::get_singleton();
		file->set_path(_path);
		if (!overwrite) {
			FileInterpreter fi = FileInterpreter();
			std::vector<Target> temporary;
			std::vector<Variable> tempVariables;
			fi.parseFile(&temporary, &tempVariables);
			_listTarget = temporary;
			_listVariable = tempVariables;
		}
	}

	~MakeFile() {}

	void save () {
		FileManager* file = FileManager::get_singleton();
		file->write(to_string());
	}

	std::string to_string() {
		std::string text = "";

		// Load all variables
		for (int i = 0; i < _listVariable.size(); i++) {
			text += std::string(_listVariable.at(i).get_key()) + "=" \
					+ std::string(_listVariable.at(i).get_value()) + "\n";
			if (i + 1 == _listVariable.size()) {
				text += "\n";
			}
		}

		// Load all targets and put everything inside a string.
		for (int i = 0; i < _listTarget.size(); i++) {
			Target that = _listTarget.at(i);

			std::string temp = std::string(that.get_title()) + ":";
			std::vector<Command> listCommands = that.get_commands();
			for(int j = 0; j < listCommands.size(); j++) {
				temp += "\n" + listCommands.at(j).to_command();
			}

			text += temp + "\n";
			if (i + 1 < _listTarget.size()) {
				text += "\n";
			}
		}

		return text;
	}

	void add_target(Target target) {
		if (check_target_existence(target)) {
			throw -1;
		} else {
			_listTarget.push_back(target);
		}
	}

	void add_target(Target target, bool overwrite) {
		if (check_target_existence(target)) {
			if (overwrite) {
				remove_target(get_target_position(target));
			} else {
				throw -1;
			}
		}
		_listTarget.push_back(target);
	}

	void add_variable(Variable var) {
		if (check_variable_existence(var)) {
			remove_variable(var);
		}
		_listVariable.push_back(var);
	}

	void remove_variable() {
		_listVariable.pop_back();
	}

	void remove_variable(char* variableChar) {
		std::string v = std::string(variableChar);
		int position = v.find_last_of("=");
		v = v.substr(0, position);
		Variable* myVariable = get_variable(v);
		if (myVariable != NULL) {
			remove_variable(*myVariable);
		}
	}

	void remove_variable(Variable v) {
		int position = get_variable_position(v);
		if (position != -1) {
			remove_variable(position);
		}
	}

	void remove_variable(int pos) {
		_listVariable.erase(_listVariable.begin() + pos);
	}

	void remove_target() {
		_listTarget.pop_back();
	}

	void remove_target(Target t) {
		int position = get_target_position(t);
		if (position != -1) {
			remove_target(position);
		}
	}

	void remove_target(int pos) {
		_listTarget.erase(_listTarget.begin() + pos);
	}

	void add_command_in_target(Target t, Command command) {
		int position = get_target_position(t);
		Target tar = _listTarget.at(position);
		tar.add_command(command);
	}

	void remove_command_from_target(Target t, int line) {
		// int position = get_target_position(t);
		// Target tar = _listTarget.at(position);
		Target* tar = get_target_as_pointer(t.get_title());
		tar->remove_command(line);

		/*	why remove the target if it have none commands?
		 	If we allow the user add target without commands,
		 	shouldn't we allow the target prevail to the command's removal?

		if (tar->get_commands().size() == 0) {
			remove_target(*tar);
		}*/
	}

	std::string list_targets() {
		std::string targets = "MakeMaker has found " + std::to_string(_listTarget.size()) + " targets.";
		targets += "\n=================================";
		for(int i = 0; i < _listTarget.size(); i++) {
			targets += "\n" + std::string(_listTarget.at(i).get_title());
		}
		targets += "\n=================================";
		return targets;
	}

	std::string list_target(char* targetName) {
		Target* t = get_target_as_pointer(targetName);
		std::string target = std::string(t->get_title()) + ":";
		for(int i = 0; i < t->get_commands().size(); i++) {
			target += "\n" + std::to_string(i+1) + ":" +
						std::string(t->get_commands().at(i).to_command());
		}
		return target;
	}

	std::string list_variables() {
		std::string variables = "";
		for (int i = 0; i < _listVariable.size(); i++) {
			variables += std::string(_listVariable.at(i).get_key()) + "=" +
						 std::string(_listVariable.at(i).get_value()) + "\n";
		}
		return variables;
	}

	Target* get_target_as_pointer(char* targetName) {
		Target temp = Target(targetName);
		for(int i = 0; i < _listTarget.size(); i++) {
			if (_listTarget.at(i) == temp) {
				return &_listTarget.at(i);
			}
		}
		return NULL;
	}

	// Review it. Before it was marked as "deprecated", but I think it should not be deprecated.
	Target get_or_create_target(char* targetName) {
		Target temp = Target(targetName);
		for(int i = 0; i < _listTarget.size(); i++) {
			if (_listTarget.at(i) == temp) {
				return _listTarget.at(i);
			}
		}

		Target t(targetName);
		return t;
	}

	Target get_target(int pos) {
		return _listTarget.at(pos);
	}

	std::vector<Target> get_targets() {
		return _listTarget;
	}

 private:
 	std::string _path;
 	std::vector<Target> _listTarget;
 	std::vector<Variable> _listVariable;

 	Variable* get_variable(std::string v) {
 		for(int i = 0; i < _listVariable.size(); i++) {
 			if (!strcasecmp(v.c_str(), _listVariable.at(i).get_key())) {
 				return &_listVariable.at(i);
 			}
 		}
 		return NULL;
 	}

 	int get_variable_position(Variable v) {
 		for (int i = 0; i < _listVariable.size(); i++) {
 			if (v == _listVariable.at(i)) {
 				return i;
 			}
 		}
 		return -1;
 	}

 	bool check_variable_existence(Variable v) {
 		return get_variable_position(v) != -1;
 	}

 	int get_target_position(Target t) {
 		for (int i = 0; i < _listTarget.size(); i++) {
 			if (t == _listTarget.at(i)) {
 				return i;
 			}
 		}
 		return -1;
 	}

 	bool check_target_existence(Target t) {
 		return get_target_position(t) != -1;
 	}

};
#endif


text:
using System;
using System.Collections.Generic;
using System.Threading;
using NHibernate.Cache;

namespace Rhino.Commons.Test.NHibernate
{
    class MockCacheProvider : ICacheProvider
    {
        class MockCache : ICache
        {
            public object Get(object key)
            {
                //noop
                return null;
            }

            public void Put(object key, object value)
            {
                //noop
            }

            public void Remove(object key)
            {
                //noop
            }

            public void Clear()
            {
                //noop
            }

            public void Destroy()
            {
                //noop
            }

            public void Lock(object key)
            {
                //noop
            }

            public void Unlock(object key)
            {
                //noop
            }

            public long NextTimestamp()
            {
                return DateTime.Now.Ticks;
            }

            public int Timeout
            {
                get { return 0; }
            }

            public string RegionName
            {
                get { return "MyRegion"; }
            }
        }

        public static bool IsStopped = true;
        public static bool IsInitialized = false;

        private readonly static Maintenance maintenance = new Maintenance();

        public static bool IsRunning
        {
            get
            {
                return maintenance.IsRunning;
            }
        }
        public ICache BuildCache(string regionName, IDictionary<string, string> properties)
        {
            return new MockCache();
        }

        public long NextTimestamp()
        {
            return DateTime.Now.Ticks;
        }

        public void Start(IDictionary<string, string> properties)
        {
            IsInitialized = true;
            IsStopped = false;
            maintenance.Start();
        }

        public void Stop()
        {
            IsStopped = true;
        }

        class Maintenance
        {
            public readonly Thread thread;

            public Maintenance()
            {
                thread = new Thread(MaintenanceThread);
            }
            public void Start()
            {
                thread.Start();
            }

            public bool IsRunning = false;
            private void MaintenanceThread()
            {
                do
                {
                    IsRunning = true;
                    Thread.Sleep(100);
                } while (IsStopped == false);
                IsRunning = false;
            }
        }
    }
}


text:
---
uid: SolidEdgeAssembly.AssemblyFilletWeld.Application
summary:
remarks:
---


text:
<!DOCTYPE html>

  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="HandheldFriendly" content="True" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="robots" content="index, follow" />

  <link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,700;1,400&family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap" rel="stylesheet">

    <link rel="stylesheet/less" type="text/css" href="https://ptyagicodecamp.github.io/theme/stylesheet/style.less">

    <link id="pygments-light-theme" rel="stylesheet" type="text/css"
          href="https://ptyagicodecamp.github.io/theme/pygments/monokai.min.css">

  <link rel="stylesheet" type="text/css" href="https://ptyagicodecamp.github.io/theme/font-awesome/css/fontawesome.css">
  <link rel="stylesheet" type="text/css" href="https://ptyagicodecamp.github.io/theme/font-awesome/css/brands.css">
  <link rel="stylesheet" type="text/css" href="https://ptyagicodecamp.github.io/theme/font-awesome/css/solid.css">

    <link href="https://ptyagicodecamp.github.io/static/custom.css" rel="stylesheet">

    <link href="https://ptyagicodecamp.github.io/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="tech&Life Atom">

    <link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/images/favicon.ico" type="image/x-icon">

    <meta name="theme-color" content="#333333">

    <meta name="msapplication-navbutton-color" content="#333333">

    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

    <meta name="msapplication-TileColor" content="#333333">

<meta name="author" content="ptyagi" />
<meta name="description" content="This article explains usage of Dart Generator functions to generate sequence of values on-demand." />
<meta name="keywords" content="generators, dart, cross-platform, flutter, code-recipes, development">

<meta property="og:site_name" content="tech&Life"/>
<meta property="og:title" content="Dart Generators"/>
<meta property="og:description" content="This article explains usage of Dart Generator functions to generate sequence of values on-demand."/>
<meta property="og:locale" content="en_US"/>
<meta property="og:url" content="https://ptyagicodecamp.github.io/dart-generators.html"/>
<meta property="og:type" content="article"/>
<meta property="article:published_time" content="2020-06-07 00:00:00-04:00"/>
<meta property="article:modified_time" content=""/>
<meta property="article:author" content="https://ptyagicodecamp.github.io/author/ptyagi.html">
<meta property="article:section" content="Dart"/>
<meta property="article:tag" content="generators"/>
<meta property="article:tag" content="dart"/>
<meta property="article:tag" content="cross-platform"/>
<meta property="article:tag" content="flutter"/>
<meta property="article:tag" content="code-recipes"/>
<meta property="article:tag" content="development"/>
<meta property="og:image" content="https://ptyagicodecamp.github.io/images/profile.jpg">

  <title>tech&Life – Dart Generators</title>

        tech&Life

Explore | Life | Mobile | Software Engineering

              Support

              Codementor

      Home

      Archives
      Categories
      Tags

      Atom

Dart Generators

      Posted on June 07, 2020 in Dart

Introduction

Dart generator functions are used to generate sequence of values on-demand lazily. Such value sequence can be generated either synchronously or asynchronously. There are two types of built-in generator functions available to support both scenarios:

Synchronous Generator: Synchronous generator function returns an Iterable object. That means first the values are generated and then returned lazily on-demand by the function.

Iterable: A collection of values, or "elements", that can be accessed sequentially.

Asynchronous Generator: Asynchronous generator function returns a Stream object. The sequence of values is generated on demand as they become available.

Stream: A source of asynchronous data events.

Check out YouTube Video

Let's understand generator functions with help of an example. We'll generate numbers starting from a given number say 5 until 0, using generator functions. We'll observe both ways (asynchronous and synchronous generators) to create this number sequence.

Using sync* - Synchronous Generator

The function Iterable<int> countDownFromSync(int num) sync* takes a number as num, and sends out all numbers starting from num until 0. The synchronous generator function is marked with sync*. The values are returned using yield keyword. The iterable sequence receives the number sequence and print each number using for loop. This number sequence actually is not generated until it has been accessed by for loop.

main1():

void main1() {
  print("Getting CountDown Iterable [sync* + yield]");
  Iterable<int> sequence = countDownFromSync(5);

  print("Starting...");

  for (int value in sequence) {
    print(value);
  }
  print("DONE");
}

//sync*
Iterable<int> countDownFromSync(int num) sync* {
  while (num > 0) {
    yield num--;
  }
}

Output:

The sync* helps to generate values in a synchronous manner. Note that Starting... message is printed before for loop's execution. The DONE message is executed at last as well.

Getting CountDown Iterable [sync* + yield]
Starting...
5
4
3
2
1
DONE

Using async* - Asynchronous Generator

The function Stream<int> countDownFromAsync(int num) async* takes a number as num, and deliver number sequence starting from num until 0. The asynchronous generator function is marked with async*. The values are returned using yield keyword. The stream sequence receives the number sequence. Its values can be accessed as soon as it got started listening upon.

main2():

void main2() {
  print("Getting CountDown Stream [async* + yield]");
  Stream<int> sequence = countDownFromAsync(5);

  print("Starting...");

  sequence.listen((int value) {
    print(value);
  });
  print("DONE");
}

//async*
Stream<int> countDownFromAsync(int num) async* {
  while (num > 0) {
    yield num--;
  }
}

Output:

The async* helps to generate values in an asynchronous manner. Note that Starting... and DONE messages/setup are printed before actual stream's values are printed. The values are printed as they become available after the setup code.

Getting CountDown Stream [async* + yield]
Starting...
DONE
5
4
3
2
1

Using sync* + yield* - Recursive Synchronous Generator

When generator functions are used recursively, yield* is used to mark such recursive function calls. This example shows how to use generator functions recursively. You'll notice the same output as for the non-recursive implementation. The keyword yield* is used for the function that's called recursively.

void main3() {
  print("Getting CountDown Iterable [sync* + yield*]");
  Iterable<int> sequence = countDownFromSyncRecursive(5);

  print("Starting...");

  for (int value in sequence) {
    print(value);
  }
  print("DONE");
}

//sync* + yield* for recursive functions
Iterable<int> countDownFromSyncRecursive(int num) sync* {
  if (num > 0) {
    yield num;

    yield* countDownFromSyncRecursive(num - 1);
  }
}

Output:

Getting CountDown Iterable [sync* + yield*]
Starting...
5
4
3
2
1
DONE

Using async* + yield* - Recursive Asynchronous Generator

This is an example of using an asynchronous generator function recursively. It also has the same output as its non-recursive counter-part.

void main4() {
  print("Getting CountDown Stream [async* + yield*]");
  Stream<int> sequence = countDownFromAsyncRecursive(5);

  print("Starting...");

  sequence.listen((int value) {
    print(value);
  });
  print("DONE");
}

//async* + yield* for recursive functions
Stream<int> countDownFromAsyncRecursive(int num) async* {
  if (num > 0) {
    yield num;

    yield* countDownFromAsyncRecursive(num - 1);
  }
}

Output:

Getting CountDown Stream [async* + yield*]
Starting...
DONE
5
4
3
2
1

Summary

In this article, we saw how to use Dart's generator function to produce an on-demand sequence of values synchronously and asynchronously in an iterative and recursive manner.

That's it for this article. Check out the Dart Vocabulary Series for other Dart stuff.

Source Code

Please checkout the source code at Github here

References

Dart language tour

Beyond Async

Generators-Flutter in Focus

Happy Darting :)

_Liked the article?
Couldn't find a topic of interest? Please leave a comment or reach out at twitter about the topics you would like me to share!

BTW I love cupcakes and coffee both :)_

Follow me at Medium

      generators
      dart
      cross-platform
      flutter
      code-recipes
      development

Like this article? Share it with your friends!

    Please enable JavaScript to view comments.

  © 2022  - This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License

Built with Pelican using Flex theme

    <svg width="80"
         height="80"
         viewBox="0 0 250 250"
         style="fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;"
         aria-hidden="true">
        <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
        <path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
              fill="currentColor"
              style="transform-origin: 130px 106px;"
              class="octo-arm">
        </path>
        <path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
              fill="currentColor"
              class="octo-body">
        </path>
    </svg>


text:
package com.vies.viesmachines.common.world;

import java.util.Random;

import com.google.common.base.Predicate;

import net.minecraft.block.state.IBlockState;
import net.minecraft.block.state.pattern.BlockMatcher;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenerator;

public class WorldGenSingleMinable extends WorldGenerator {

	private IBlockState block;
	private Predicate<IBlockState> target;

	//used to gen single ore.
	public WorldGenSingleMinable(IBlockState block, Predicate<IBlockState> target)
	{
		this.block = block;
		this.target = target;
	}

	@SuppressWarnings("unchecked")
	public WorldGenSingleMinable(IBlockState block)
	{
		this(block, BlockMatcher.forBlock(Blocks.STONE));
	}

	@Override
	public boolean generate(World world, Random rand, BlockPos pos)
	{
		if (world.getBlockState(pos).getBlock().isReplaceableOreGen(block, world, pos, this.target))
			world.setBlockState(pos, this.block);
		return true;
	}
}


text:
SPEC_BEGIN(UAEC2ReplaceNetworkACLAssociationRequestSpec)

describe(@"UAEC2ReplaceNetworkACLAssociationRequest", ^
{

});

SPEC_END


text:
%SECCIÓN 1: ANSCOMBE Y WITTGENSTEIN
\section{Anscombe y Wittgenstein}

\subsection{El método de Wittgenstein}
El 16 de octubre de 1944 Ludwig Wittgenstein reanudó su itinerario de clases en
Cambridge con dos encuentros de dos horas cada semana. Aquél trimestre
'Michaelmas' contaba seis estudiantes en su curso, entre ellos Elizabeth
Anscombe.

\engcitation{I am like a piano teacher. I am trying to teach a style of
  thinking, a technique, not a subject matter. Anscombe recalls (1995, p. 407):
  ``He himself in his classes sometimes said he was as it were giving examples
  of `five-finger exercises' in thinking. These were certainly not limited in
  number like the set a piano teacher might employ, and were not like automatic
  formulae of investigation.'' (Cf. Gass 1971, p. 248: ``what you heard was
  something like a great pianist at practice: not a piece of music, but the very
  acts which went into making that performance.'')}
En aquellas lecciones sobre psicología filosófica se comportaba como un maestro
de piano ---decía--- intentaba enseñar un estilo de pensar, una técnica. Los
alumnos lo describían como participar de las prácticas donde el buen pianista
afina los movimientos que van dirigidos a construir un gran
concierto.\footcite[p.~357]{pubnpriv}

En cierta ocasión Wittgenstein recibió a Anscombe con una pregunta: <<¿Por qué
la gente dice que era natural pensar que el sol giraba alrededor de la tierra en
lugar de que la tierra rotaba en su eje?>> Elizabeth contestó: <<Supongo que
porque se veía como si el sol girara alrededor de la tierra.>> <<Bueno\ldots>>,
añadió Wittgenstein, <<¿cómo se hubiera visto si se hubiera \emph{visto} como si
la tierra rotara en su propio eje?>> Anscombe reaccionó extendiendo las manos
delante de ella con las palmas hacia arriba y, levantándolas desde sus rodillas
con un movimiento circular, se inclinó hacia atrás asumiendo una expresión de
mareo. <<¡Exactamente!>> exclamó Wittgenstein.\footcite[cf.~][p.~151]{IWT}

Anscombe se percató del problema; la pregunta de Wittgenstein había puesto en
evidencia que hasta aquél momento no había ofrecido ningún significado relevante
para su expresión \emph{``se veía como si''} en su respuesta \emph{``se veía
  como si el sol girara alrededor de la tierra''}.

¿Qué tipo de problema es este? ¿Qué falta cuando una expresión carece de
significado?
\pnote{¿Es esta una pregunta sobre la representación que significan las palabras? ¿Es
una pregunta sobre el uso que se les da a las palabras?}

\subsection{El arte de hacer filosofía}

\ifdraft{\subsubsection{Vida salvaje luchando por emerger abiertamente}}{}

\engcitation{``Within all great art there is a WILD animal: tamed.''}
Wittgenstein pensaba que
\citalitinterlin{dentro de todo buen arte hay un animal salvaje
  domado}\footcite[p.~43e]{cnv}.
Su talante artístico, sin embargo, no manifestaba esta primitiva vitalidad; o
como él mismo decía:
\engcitation{``In my artistic activities I have merely good manners''}
\citalitinterlin{en mis actividades artísticas tengo meramente buenos
modales.}\footcite[p.~29e]{cnv}

Ejemplo de estos ``buenos modales'' fue el diseño que realizó para la casa
de su hermana Margaret en Viena, terminada en 1928.
\engcitation{``my house for Gretl is the product of a sensitive ear, good
  manners, the expression of great understanding... wild life striving to erupt
  in the open is lacking... health is lacking (Kierkergaard)''}
Trabajó como arquitecto de la casa con exhaustiva minuciosidad y el producto
manifestaba gran entendimiento, ``buen oido'', pero le escaseaba ``salud'',
pensaba él.\footcite[p.~43e]{cnv}
\engcitation{``Even in music... feeling, he showed above all great
  understanding, rather than manifesting wild life... When he played music with
  others... his interest was in getting it right... When he played, he was not
  expressing himself... but the thoughts... of others. He was probably right to
  regard himself not as creative but as reproductive ...It was only in
  philosophy that his creativity could really be awakened. Only then, as Russell
  had long ago noticed, does one see in him 'wild life striving to erupt in the
  open''}

También en la música, arte por la que tenía la mayor afición, era llamativa su
recia exactitud. Cuando tocaba con otros ponía su mayor interés en lograr una
expresión exacta y correcta, recreando música y pensamientos ajenos, más que
expresándose a sí mismo. Perseguía reproducir más que
crear.\footcite[loc.˜]{monk}

Esta fuerza creativa ausente en su rigurosa actitud hacia la actividad artística
estallaba, sin embargo, en su actividad filosófica. Aquella cualidad que él
encontraba característica del buen arte, esa vida salvaje luchando por emerger
abiertamente,\footcite[cf.˜][loc.˜]{monk} estaba en su hacer filosofía.

\ifdraft{\subsubsection{Filosofía emergente}}{}

Y la filosofía nació así en él. Como una fuerza violenta. Se hallaba estudiando
ingeniería en Manchester y se interesó por los fundamentos de las matemáticas.
Este interés no tardó en convertirse en el deseo de elaborar un trabajo
filosófico. Su hermana Hermine le describe así en sus memorias de la familia
Wittgenstein
\footnote{Hermine Wittgenstein escribió la historia y memorias de su familia
  ``Familienerinnerungen'' durante la segunda Guerra Mundial.}:
\citalitlar{Fue repentinamente agarrado por la filosofía ---es decir, por la
  reflexión en problemas filosóficos--- tan violentamente y tan en contra de su
  voluntad que sufrió severamente por la doble y conflictiva llamada interior y
  se veía a sí mismo como roto en dos. Una de muchas transformaciones por las
  que pasaría en su vida había venido sobre él y le estremeció hasta lo más
  profundo. Estaba concentrado en escribir un trabajo filosófico y finalmente
  determinó mostrar el plan de su obra al Profesor Frege en Jena, quien había
  discutido preguntas similares. [\ldots] Frege alentó a Ludwig en su búsqueda
  filosófica y le aconsejó que fuera a Cambridge como alumno del Profesor
  Russell, cosa que Ludwig ciertamente hizo.\footcite[p. 73]{mcguinness}}

La investigación filosófica comenzada en aquel momento se convirtió en la tarea
del resto de su vida. Sus incipientes ideas filosóficas pasarían por diversas
transformaciones, pero expresaban ya desde el principio una preocupación por los
problemas fundamentales. Por las reglas del juego, se podría decir.

\ifdraft{\subsubsection{La Naturaleza de los problemas Filosóficos}}{}

Entre esas cuestiones fundamentales se halla una de las constantes importantes
en su pensamiento. Ésta es su definición de la naturaleza de los problemas
filosóficos. Para Wittgenstein las cuestiones de la filosofía no son
problemáticas por ser erróneas, sino por no tener
significado.\footcite[cf.~][4.003]{tractatus}

Una proposición sin significado que no es puesta al descubierto como tal atrapa
al filósofo dentro de una confusión del lenguaje que no le permite acceder a la
realidad. Salir de la confusión no consiste en refutar una doctrina y plantear
una teoría alternativa, sino en examinar las operaciones hechas con las palabras
para llegar a manejar una visión clara del empleo de nuestras expresiones. La
filosofía no es un cuerpo doctrinal, sino una
actividad\footcite[cf.~][4.112]{tractatus}y una
terapia\footcite[cf.~][\S133]{PI}.

La actitud terapéutica adoptada por Wittgenstein en su atención de las
confusiones filosóficas fue su respuesta más definitiva a la naturaleza de estos
problemas. Para ello halló los más eficaces remedios en sus investigaciones
sobre el significado y el sentido del lenguaje.

Ordinariamente tomamos parte en esta actividad humana que es el lenguaje.
Jugamos el juego del lenguaje. ---¿Jugarlo es entenderlo?--- A la vista de
Wittgenstein saltaban extraños problemas sobre las reglas de este juego;
entonces no podía evitar escudriñarlas al
detalle.\footcite[cf.~][loc.7099]{monk} En este análisis del lenguaje está la
raíz de sus ideas sobre el sentido, el significado y la verdad.

Durante su vida sostuvo dos grandes descripciones del significado. Originalmente
describió el lenguaje como una imagen que representa el posible estado de las
cosas en el mundo. En una segunda etapa se distanció de esta analogía para
describir al lenguaje como una herramienta cuyo significado consiste en la suma
de las múltiples semejanzas familiares que aparecen en los distintos usos para
los cuales el lenguaje es empleado en la actividad humana. Dentro de la primera
descripción una expresión sin significado es una cuyos elementos no componen una
representación del posible estado de las cosas. Dentro de la segunda descripción
una expresión sin significado resulta del empleo de una expresión propia de un
``juego del lenguaje'' fuera de su contexto.

\ifdraft{\subsubsection{Dos Cortes en la Filosofía}}{}

Estas dos etapas del pensamiento de Wittgenstein son representadas por dos
importantes tratados. El \emph{'Tractatus Logico\=/Philosophicus'}, publicado en
1921, recoge sus esfuerzos por elaborar un gran tratado filosófico comenzados en
1911 y culminados durante la Primera Guerra Mundial. El segundo,
\emph{'Philosophische Untersuchungen'}, o \emph{'Investigaciones Filosóficas'},
traducido por Anscombe y publicado posthumamente en 1953, fue elaborado a partir
de múltiples manuscritos desarrollados por Wittgenstein desde su regreso a
Cambridge en 1929 hasta su muerte en 1951. Ambas obras generaron un `corte' en
la historia de la filosofía, es decir, cambiaron el modo de hacer filosofía
desde entonces.\footcite[cf.~][p.~181]{twocuts}

Anscombe ofrece un análisis de estos cambios de época generados por la
influencia de Wittgenstein. Describe el esfuerzo de comprender cada libro tras
su publicación, tarea complicada en ambos casos por la dificultad intrínseca de
los tratados, ofuscada a su vez por los prejuicios filosóficos proyectados a
cada obra por sus lectores. La presunción, por ejemplo, de que
\emph{'Investigaciones Filosóficas'} presenta una teoría del lenguaje ---quizás
sobre cómo los sonidos se tornan en discursos significativos--- nos dejaría
situados lejos de las preguntas que genuinamente ocupan a
Wittgenstein.\footcite[cf.~][p.~183]{twocuts} Ahora bien, la comprensión
adecuada de su pensamiento y método trae consigo cierto efecto curativo.

Anscombe destaca que Wittgenstein ataca el tipo de cosas que nos impiden llegar
a concepciones verdaderas. Una de esas cosas es la inclinación de los filósofos
a manufacturar explicaciones o conexiones necesarias.

Decir que necesariamente el triangulo es la figura rectilinea plana con el menor
número de lados, por ejemplo, es un tipo de concepción de necesidad
especializada e inocua; decir que necesariamente la continuidad espacio-temporal
es el criterio de la identidad del cuerpo humano viviente y de la persona humana
es un tipo de concepción de necesidad engañosa. ¿Cómo podría este o cualquier
otro criterio de identidad que pueda ser sugerido satisfacer la exigencia de que
no sea logicamente posible que dos personas lo cumplan? Además, ¿qué problema
tiene que el criterio no sea necesario? ¿Por qué queremos algo para lo que no
pueda haber un contraejemplo? \footcite[cf.~][p.~184]{twocuts}

A modo de insistencia en este contraste entre conceptos de necesidad; considera
el modo en el que hacemos cuentas en una serie, o el modo en el que calculamos
el valor de una variable $\mathcal{Y}$ dado un cierto valor para $\mathcal{X}$
en una fórmula. Podríamos decir que la serie está determinada ya de antemano por
la fórmula, al calcularla sólo ponemos en tinta, por así decirlo, la parte de la
serie que estamos computando.

% Este contraste entre un concepto de necesidad inofensivo y uno engañoso es
% especialmente notable en el caso del desarrollo de una serie o cuando se
% obtiene
% el valor de $\mathcal{Y}$ dado un cierto valor para $\mathcal{X}$ en una
% formula. Dada una formula donde el valor de y sea determinado por el valor de
% x
% podriamos decir que toda la serie está determinada ya, al calcularla sólo
% estamos poniendo por escrito, por así decirlo, la parte de la serie que
% estamos
% computando.

Aquí no estamos exactamente manufacturando una necesidad, sino que
\citalitinterlin{tratando de formular el ideal de una necesidad que está siendo
  imitada por los cálculos cuando son de resultados que son `determinados', en
  ese sentido inofensivo de necesidad \footcite[p.~185]{twocuts}}.
Ciertamente, en esto hay profundos problemas sobre la naturaleza de las
matemáticas y exáctamente qué son es la primera tarea de alguien que quiera
entender a Wittgenstein o los fundamentos de las matemáticas.

Hay, por tanto, un cierto sentido de necesidad o determinación que manejamos en
el desarrollo de una serie.

Wittgenstein afirmó que la pregunta sobre la manera adecuada de continuar una
serie es la misma pregunta sobre cómo usar la palabra `rojo'. Aquí también
merodea la idea de que hay un `deber de' sobre la futura aplicación y comprendes
ese `deber de' al comprender el significado de la palabra.

Aquí no se trata de inventar una necesidad, sino de descansar contentos con las
que creemos haber comprendido. Hasta que alguien nos interrumpe con una pregunta
sobre la necesidad de estar en lo cierto cuando usamos una palabra de cierto
modo. Esta pregunta sería esceptica sólo para aquel que asumiera que sus
presunciones son irrefragablemente correctas.

La descripción detallada de la distribución de parches de colores en un canvas
no nos revela la imagen que está sobre él, aunque si dices: `pero está ahí
\emph{también} la imagen. \emph{¿En qué consiste ésta?} Tiene que haber algo
además de pintura en un canvas' ---te estás embarcando en una búsqueda ilusoria.
El vasto número de cosas que conocemos y hacemos y con las que nos involucramos
son como la imagen en el canvas. Los hechos acerca de nuestro conocer, nuestro
hacer y nuestras preocupaciones son enormemente interesantes; pero necesidades
de un tipo de absoluto a priori no pueden ser encontradas para justificar
nuestras aseveraciones.

Las cosas que Wittgenstein ataca ---éstas son impedimentos para una verdadera
concepción o verdaderas concepciones. Es un impedimento para ver a la imagen, si
estás golpeado por la convicción de que debes una de dos extraer la imagen desde
la descripción del color de cada parche de pintura en una fina cuadrícula
extendida sobre esta o que debes tener una teoría de lo que la imagen es aparte
de lo que esa descripción describe.

Si tu renuncias a ambas inclinaciones podrás llegar a ver a la pintura y en
haciéndolo puedes encontrarte lleno de asombro.

O, como Wittgenstein una vez lo dijera, puedes encontrarte a tí mismo 'caminando
en una montaña de maravillas'

% Para Ludwig Wittgenstein el método general adecuado de discutir los problemas
% filosóficos era mostrar que la persona no ha provisto significado (o
% referencia) para ciertos signos en sus expresiones.\footcite[cf. p. 151]{IWT}
% Creía que el camino que lleva a formular estos problemas está frecuentemente
% trazado por la mala comprensión de la lógica de nuestro lenguaje. Por tanto,
% el modo de aclarar esta confusión consistía en identificar en el lenguaje el
% límite de lo que expresa pensamiento; lo que queda al otro lado de esta
% frontera es simplemente sinsentido. En otras palabras: \citalitinterlin{Lo que
% \todo{traducción difícil. \emph{``What can be said at all''}} siquiera puede
% ser dicho puede ser dicho claramente; y de lo que uno no puede hablar, de eso,
% uno debe guardar silencio}. \footcite[prefacio]{tractatus} Con esta expresión
% Wittgenstein resumía el significado del libro que recoge su esfuerzo para
% resolver este problema de la filosofía: el \emph{'Tractatus
% Logico\=/Philosophicus'}.

% Elaboración del Tractatus
% En el 14 empezó la guerra, en el 15 W. escribió a R. con sus intenciones de
% hacer un tratado. En el 18 lo acabó. En el 19 envió el manuscrito a R. En el
% 22
% lo publicó.

Es preciso ahora discurrir sucintamente con Ludwig por este camino de
claridad.

\subsection{El gran tratado de Wittgenstein}
\ifdraft{\subsubsection{De Manchester a Cambridge}}{}

\pnote{El propósito de recorrer el desarrollo que lleva al Tractatus es ofrecer
  un trasfondo a los puntos que resaltamos más adelante.}

Los primeros esfuerzos de Wittgenstein por escribir una obra sobre filosofía
habían comenzado en 1911. En otoño de ese año en lugar de continuar sus estudios
de ingeniería en Manchester, determinó irse a Cambridge donde Bertrand Russell
ofrecía sus lecciones.

Asistió a un término de lecciones con Russell y al finalizar no estaba seguro de
abandonar la ingeniería por la filosofía, se cuestionaba si verdaderamente tenía
talento para ella. Consultó a su nuevo profesor al respecto y éste le pidió que
escribiera algo para ayudarle a hacer un juicio.

En enero de 1912 Wittgenstein regresó a Cambridge con un manuscrito que
demostraba auténtica agudeza filosófica. Convencido de su gran capacidad,
Russell alentó a Ludwig a continuar dedicándose a la filosofía. Este apoyo fue
crucial para Wittgenstein, hecho puesto de manifiesto por el gran empeño con el
que trabajó en sus estudios aquel curso. Al finalizar el termino Russell alegaba
que Ludwig había aprendido todo lo que él podía enseñarle.\footcite[cap. 3 loc
865]{monk}

\ifdraft{\subsubsection{A Noruega a Resolver los problemas de la lógica}}{}
Después de una temporada en Cambridge llena de eventos y desarrollos
Wittgenstein anunció en septiembre de 1913 sus planes de retirarse para
dedicarse exclusivamente a trabajar en resolver los problemas fundamentales de
la lógica. Su idea era irse a Noruega, a algún lugar apartado, ya que pensaba
que en Cambridge las interrupciones obstaculizarían su trabajo.\footcite[cap. 4
loc 1844]{monk}

\ifdraft{\subsubsection{La Gran Guerra}}{} El trabajo en Noruega fue escabroso.
En el verano de 1914 interrumpió su tarea para tomar un receso en
Viena.\footcite[cap. 5 loc 2154]{monk} Había planificado regresar a Noruega
después del verano, sin embargo la tensión entre las potencias europeas,
agravada desde el atentado de Sarajevo a finales de junio de aquel año, detonó
en el estallido de la Gran Guerra. El 7 de agosto de 1914 Wittgenstein se
enlistaba como voluntario al servicio militar. Sería en las trincheras donde
culminaría su gran tratado filosófico.

El 22 de octubre de 1915 Wittgenstein escribió a Russell desde el taller de
artillería en Sokal, al norte de Lemberg, con lo que sería una primera versión
de su libro.\footcite[cf. p.84]{cambridgeletters} Cuatro años más tarde, el 13
de marzo, escribía a Russell desde Cassino donde se hallaba como prisionero de
guerra en un campamento italiano\footcite[cf. p.268]{mcguinness}:
\citalitlar{He escrito un libro llamado ``Logisch-Philosophische Abhandlung''
  que contiene todo mi trabajo de los últimos seis años. Creo que finalmente
  he resuelto todos nuestros problemas. Esto puede sonar arrogante, pero no
  puedo evitar creerlo. Terminé el libro en agosto de 1918 y dos meses más
  tarde fui hecho 'Prigioniere'.\footcite[p.89]{cambridgeletters}}

  \ifdraft{\subsubsection{Aire de Misticismo}}{}
  En junio de aquel año logró enviar el manuscrito del libro a Russell por medio
  de John Maynard Keynes quien intervino con las autoridades italianas para
  permitir el envío seguro del texto\footcite[p.90 y 91]{cambridgeletters}. El 26
  de agosto de 1919 fue oficialmente liberado de sus funciones
  militares\footcite[p.277]{mcguinness} y en diciembre finalmente pudo encontrarse
  con Russell en la Haya. De aquel encuentro Russell escribe:
  \citalitlar{Había sentido un sabor a misticismo en su libro, pero me quedé
      asombrado cuando vi que se ha convertido en un completo místico. Lee a gente
      como Kierkergaard y Angelus Silesius, y ha contemplado seriamente el
      convertirse en un monje. Todo comenzó con ``Las variedades de la experiencia
      religiosa'' de William James y creció durante el invierno que pasó solo en
      Noruega antes de la guerra cuando casi se había vuelto loco. Luego, durante
      la guerra, algo curioso ocurrió. Estuvo de servicio en el pueblo de Tarnov
      en Galicia, y se encontró con una librería que parecía contener solamente
      postales. Sin embargo, entró y encontró que tenían un sólo libro: Los
      Evangelios abreviados de Tolstoy. Compró el libro simplemente porque no
      había otro. Lo leyó y releyó y desde entonces lo llevaba siempre consigo,
      estando bajo fuego y en todo momento. Aunque en su conjunto le gusta menos
      Tolstoy que Dostoeweski. Ha penetrado profundamente en místicos modos de
      pensar y sentir, aunque pienso que lo que le gusta del misticismo es su
      poder para hacerle dejar de pensar. No creo que realmente se haga monje, es
      una idea, no una intención. Su intención es ser profesor. Repartió todo su
      dinero entre sus hermanos y hermanas, pues encuentra que las posesiones
      terrenales son una carga. \footcite[p. 112]{cambridgeletters}}

  \ifdraft{\subsubsection{En busca de una experiencia religiosa}}{}
  Cuando Wittgenstein se enlistó en el ejercito para la guerra en 1914 tenía
  motivaciones más complejas que la defensa de su patria.\footcite[loc2276]{monk}
  Sentía que, de algún modo, la experiencia de encarar la muerte le haría mejor
  persona. Había leído sobre el valor espiritual de confrontarse con la muerte en
  ``Las variedades de la experiencia religiosa'':
  \citalitlar{No importa cuales sean las fragilidades de un hombre, si estuviera
      dispuesto a encarar la muerte, y más aún si la padece heroicamente, en el
      servicio que éste haya escogido, este hecho le consagra para
      siempre.\footcite[loc 2295]{monk}}

  Wittgenstein esperaba esta experiencia religiosa de la guerra.
  \citalitinterlin{Quizás}, escribía en su diario, \citalitinterlin{La cercanía de
      la muerte traerá luz a la vida. Dios me ilumine.}\footcite[loc2295]{monk}
  La guerra había coincidido con esta época en la que el deseo de convertirse en
  una persona diferente era más fuerte aún que su deseo de resolver los problemas
  fundamentales de la lógica.\footcite[loc2305]{monk}

  \ifdraft{\subsubsection{La Principal Contienda}}{}
  Esta transformación sorprendió a Russell en aquel encuentro en la Haya, pero
  además fue motivo de confusión en la tarea de entender el Tractatus. Cuando
  Russell recibió el manuscrito en agosto escribió a Wittgenstein cuestionando
  algunos puntos difíciles del texto. En su carta observaba:
  \citalitlar{Estoy convencido de que estás en lo correcto en tu principal
      contienda, que las proposiciones lógicas son tautologías, las cuales no son
      verdad en el mismo modo que las proposiciones
      sustanciales.\footcite[p.96]{cambridgeletters}}

  Esta interpretación del texto se ajusta bien a la importancia que había tenido
  esta cuestión en las discusiones entre Russell y Wittgenstein. Así lo expresaba
  Russell en ``Introducción a la Filosofía Matemática'' publicado en mayo de aquel
  año:
  \citalitlar{
      \todo{The importance of "tautology" for a definition of
      mathematics was pointed out to me by my former pupil Ludwig Wittgenstein,
      who was working on the problem. I do not know whether he has solved it, or
      even whether he is alive or dead.}
      La importancia de la ``tautología'' para una definición de las
      matemáticas me fue señalada por mi ex-alumno Ludwig Wittgenstein, quien
      estaba trabajando en el problema. No sé si lo ha resuelto, o siquera si está
      vivo o muerto.\footcite[p.205]{introtomathphi}}

  Sin embargo para el Tractatus la cuestión sobre las proposiciones lógicas como
  tautologías no es ya el tema principal, sino que enfatiza otra cuestión, así
  corrige Wittgenstein en su respuesta a la carta de Russell:
  \citalitlar{Ahora me temo que realmente no has captado mi principal contienda,
      para lo cual todo el asunto de las proposiciones lógicas es sólo corolario.
      El punto principal es la teoría sobre lo que puede ser expresado por
      proposiciones ---es decir, por el lenguaje--- (y, lo que viene a ser lo mismo,
      aquello que puede ser pensado) y lo que no puede ser expresado por medio de
      proposiciones, sino solamente mostrado; lo cual, creo, es el problema
      cardinal de la filosofía\ldots \footcite[p. 98]{cambridgeletters}}

  Esta respuesta de Wittgenstein no solo pone de manifiesto su cambio de enfoque,
  sino que ofrece una clave para introducirse en su obra.

  %CUARTA CUESTIÓN: LA ``DOCTRINA'' DEL TRACTATUS
  %1. La filosofía como actividad
  %2. El pensamiento como representación
  %3. Los polos de verdad y falsedad de las proposiciones
  %4. La diferencia ente decir y mostrar
  \subsection{Las elucidaciones del Tractatus}
  \todo{Este párrafo resume los cuatro puntos del Tractatus que se desglosarán en
      los próximos párrafos}
  Desde las proposiciones principales del Tractatus queda claro que el tema
  central del libro es la conexión entre el lenguaje, o el pensamiento, y la
  realidad.
  \todo{1.Filosofía como actividad}
  En este nexo es donde la actividad filosófica ha de buscar esclarecer el
  pensamiento.
  \todo{2.El pensamiento como representación}
  La tesis básica sobre esta relación consiste en que las proposiciones, o su
  equivalente en la mente, son imágenes de los hechos.
  \todo{3.Las proposiciones como proyecciones con polos de verdad-falsedad}
  La proposición es la misma imagen tanto si es cierta como si es falsa, es decir,
  es la misma imagen sin importar que lo que se corresponde a ésta es el caso que
  es cierto o no. El mundo es la totalidad de los hechos, a saber, de lo
  equivalente en la realidad a las proposiciones verdaderas.
  \todo{4.La distinción entre el decir y el mostrar}
  Sólo las situaciones que pueden ser plasmadas en imágenes pueden ser afirmadas
  en proposiciones. Adicionalmente hay mucho que es inexpresable, lo cual no
  debemos intentar enunciar, sino más bien contemplar sin palabras.\footcite[cf.
  p.19]{IWT}

  \subsubsection{La filosofía como actividad}

  La filosofía es la actividad que tiene como objeto la clarificación lógica
  de los pensamientos.\footcite[4.112 p. 52]{tractatus} El problema de muchas de
  las proposiciones y preguntas que se han escrito acerca de asuntos filosóficos
  no es que sean falsas, sino carentes de significado. Wittgenstein continúa:
  \citalitlar{4.003~En consecuencia no podemos dar respuesta a preguntas de este
      tipo, sino exponer su falta de sentido. Muchas cuestiones y proposiciones de
      los filósofos resultan del hecho de que no entendemos la lógica de nuestro
      lenguaje. (Son del mismo genero que la pregunta sobre si lo Bueno es más o
      menos idéntico a lo Bello). Y así no hay que sorprenderse ante el hecho de
      que los problemas más profundos realmente no son problemas.\footcite[4.003
      p. 45]{tractatus}}

  Es así que el precipitado de la reflexión filosófica que el Tractatus recoge no
  pretende componer un cuerpo doctrinal articulado por proposiciones filosóficas,
  sino más bien ofrecer `elucidaciones' que sirven como etapas escalonadas y
  transitorias que al ser superadas conducen a ver el mundo correctamente. Este
  esfuerzo hace de pensamientos opacos e indistintos unos claros y con límites
  bien definidos.\footcite[cf. 4.112 y 6.54]{tractatus}
  La posibilidad de llegar a una visión clara del mundo es fruto de la posibilidad
  de lograr aclarar la lógica del lenguaje. El lenguaje, a su vez, está compuesto
  de la totalidad de las proposiciones, y éstas, cuando tienen sentido,
  representan el pensamiento.\footcite[cf. 4 y 4.001]{tractatus}
  Sin embargo, el mismo lenguaje que puede expresar el pensamiento lo disfraza:

  \citalitlar{4.002~El lenguaje disfraza el pensamiento; de tal manera que de la
      forma externa de sus ropajes uno no puede inferir la forma del pensamiento
      que estos revisten, porque la forma externa de la vestimenta esta elaborada
      con un propósito bastante distinto al de favorecer que la forma del cuerpo
      sea conocida.}

  El intento de llegar desde el lenguaje al pensamiento por medio de las
  proposiciones con significado es el esfuerzo por conocer una imagen de la
  realidad. El pensamiento es la imagen lógica de los hechos, en él se contiene la
  posibilidad del estado de las cosas que son pensadas y la totalidad de los
  pensamientos verdaderos es una imagen del mundo.\footcite[cf.][3 y
  3.001]{tractatus}

  \subsubsection{El pensamiento como representación}

  El pensamiento es representación de la realidad por la identidad existente entre
  la posibilidad de la estructura de una proposición y la posibilidad de la
  estructura un hecho:

  \citalitlar{Los objetos ---que son simples--- se combinan en situaciones
      elementales. El modo en el que se sujetan juntos en una situación tal es su
      estructura. Forma es la posibilidad de esa estructura. No todas las
      estructuras posibles son actuales: una que es actual es un `hecho
      elemental'. Nosotros formamos imágenes de los hechos, de hechos posibles
      ciertamente, pero algunos de ellos son actuales también. Una imagen consiste
      en sus elementos combinados en un modo específico. Al estar así presentan a
      los objetos denominados por ellos como combinados específicamente en ese
      mismo modo. La combinación de los elementos de la imagen ---la combinación
      siendo presentada--- se llama su estructura y su posibilidad se llama la
      forma de representación de la imagen.
      Esta `forma de representación' es la posibilidad de que las cosas están
      combinadas como lo están los elementos de la imagen.
      \footnote{\cite[cf.][p.~171]{simplicity}; \cite[n.~2.15]{tractatus}}}

  La representación y los hechos tienen en común la forma lógica:
  \citalitlar{2.18~Lo que toda representación, de una forma cualquiera, debe tener
      en común con la realidad, de manera que pueda representarla ---cierta o
      falsamente--- de algún modo, es su forma lógica, esto es, la forma de la
      realidad.\footcite[p.34]{tractatus}}

  \subsubsection{Las proposiciones como proyecciones con polos de verdad-falsedad}
  \todo{Añadir analogía sobre la verdad ---si es que no se va a usar en el próximo
  apartado---}
  La imagen de la realidad se convierte en proposición en el momento en que
  nosotros correlacionamos sus elementos con las cosas
  actuales.\footcite[cf.~][p.~73]{IWT}
  La condición de posibilidad de entablar dicha correlación es la relación interna
  entre los elementos de la imagen en una estructura con
  sentido.\footcite[cf.~][p.~68]{IWT}
  De este modo:
  \citalitlar{5.4733~Frege dice: Toda proposición legítimamente construida tiene
      que tener un sentido; y yo digo: Toda proposición posible está legítimamente
      construida, y si ésta no tiene sentido es sólo porque no hemos dado
      significado a alguna de sus partes constitutivas. (Incluso cuando pensemos
      que lo hemos hecho.)\footcite[p.~78]{tractatus}}

  La proposición expresa el pensamiento perceptiblemente por medio de signos.
  Usamos los signos de las proposiciones como proyecciones del estado de las cosas
  y las proposiciones son el signo proposicional en su relación proyectiva con el
  mundo. A la proposición le corresponde todo lo que le corresponde a la
  proyección, pero no lo que es proyectado, de tal modo, que la proposición no
  contiene aún su sentido, sino la posibilidad de expresarlo; la forma de su
  sentido, pero no su contenido.\footcite[cf.~][3.1,3.11-3.13]{tractatus}

  La proposición no `contiene su sentido' porque la correlación la hacemos nosotros,
  al `pensar su sentido'. Hacemos esto cuando usamos los elementos de la
  proposición para representar los objetos cuya posible configuración estamos
  reproduciendo en la disposición de los elementos de la proposición. Esto es lo
  que significa que la proposición sea llamada una imagen de la
  realidad.\footcite[cf.~][p.69]{IWT}

  Toda proposición-imagen tiene dos acepciones. Puede ser una descripción de
  la existencia de una configuración de objetos o puede ser una descripción de la
  no-existencia de una configuración de objetos.\footcite[cf.~][p.~72]{IWT}
  %Es una peculiaridad de la proyección el que de ésta y del método de proyección
  %se puede decir qué es lo que se está proyectando, sin que sea necesario que tal
  %cosa exista físicamente.\footcite[cf.~][p.~72]{IWT}
  %La idea de la proyección es peculiarmente apta para explicar el carácter de una
  %proposición como teniendo sentido independientemente de los hechos, como
  %inteligible aún antes de que se sepa que es cierta; como algo que concierne lo
  %que se puede cuestionar sobre si es verdad, y saber lo que se pregunta antes de
  %conocer la respuesta.\footcite[cf.~][p.~73]{IWT}
  Esta doble acepción es el resultado de que la proposición-imagen puede ser una
  proyección hecha en sentido positivo o negativo.\footcite[cf.~][p.~74]{IWT} Esto
  queda ilustrado en una analogía:

  \citalitlar{4.463~La proposición, la imagen, el modelo, son en el sentido
      negativo como un cuerpo solido, que restringe el libre movimiento de otro:
      en el sentido positivo, son como un espacio limitado por una sustancia
      sólida, en la cual un cuerpo puede ser colocado.\footcite[p.~63]{tractatus}}

  De este modo toda proposición-imagen tiene dos polos; de verdad y de falsedad.
  Las tautologías y las contradicciones, por su parte, no son imagenes de la
  realidad ya que no representan ningún posible estado de las cosas. Así continúa
  la ilustración anterior:

  \citalitlar{4.463~Una tautología deja abierto para la realidad el total infinito
      del espacio lógico; una contradicción llena el total del espacio lógico no
      dejando ningún punto de él para la realidad. Así pues ninguna de las dos
      puede determinar la realidad de ningún modo.\footcite[p.~78]{tractatus}}

  La verdad de las proposiciones es posible, de las tautologías es cierta y de las
  contradicciones imposible. La tautología y la contradicción son los casos límite
  de la combinación de signos ---específicamente--- su
  disolución.\footcite[cf.~][4.464 y 4.466]{tractatus} Las tautologías son
  proposiciones sin sentido (carecen de polos de verdad y falsedad), su negación son
  las contradicciones. Los intentos de decir lo que sólo puede ser mostrado
  resultan en esto, en formaciones de palabras que carecen de sentido, es decir,
  son formaciones que parecen oraciones, cuyos componentes resultan no tener
  significado en esa forma de oración.\footcite[cf.~][p.~163~\S2]{IWT}.

  \subsubsection{La distinción entre el decir y el mostrar}
  La conexión entre las tautologías y aquello que no se puede decir, sino
  mostrar, es que éstas ---siendo proposiciones lógicas sin sentido--- muestran
  la 'lógica del mundo'.\footcite[cf.~][p.~163~\S3]{IWT}. Esta 'lógica del
  mundo' o 'de los hechos' es la que más prominentemente aparece en el Tractatus
  entre las cosas que no pueden ser dichas, sino mostradas. Esta lógica no solo
  se muestra en las tautologías, sino en todas las proposiciones. Queda exhibida
  en las proposiciones diciendo aquello que pueden decir.

  La forma lógica no puede expresarse desde el lenguaje, pues es la forma del
  lenguaje mismo, se hace manifiesta en éste, no es representativa de los objetos
  y tampoco puede ser representada por signos, tiene que ser mostrada:
  \citalitlar{4.0312~La posibilidad de las proposiciones se basa en el principio de
      la representación de los objetos por medio de signos. Mi pensamiento
      fundamental es que las ``constantes lógicas'' no son representativas. Que la
      lógica de los hechos no puede ser representada.\footcite[p.~48]{tractatus}}

  La lógica es, por tanto, trascendental, no en el sentido de que las
  proposiciones sobre lógica afirmen verdades trascendentales, sino en que todas
  las proposiciones muestran algo que permea todo lo decible, pero es en sí mismo
  indecible.\footcite[cf.~][p.~166 \S2]{IWT}

  Otra cuestión notoria entre aquello que no puede ser dicho, sino mostrado es la
  cuestión acerca de la verdad del solipsismo. Los limites del mundo son los
  límites de la lógica, lo que no podemos pensar, no podemos pensarlo, y por tanto
  tampoco decirlo. Los límites de mi lenguaje significan los límites de mi
  mundo.\footcite[cf~.][5.6~y~5.61]{tractatus} De este modo:
  \citalitlar{5.62~[\ldots]Lo que el solipsismo \emph{significa}, es ciertamente
      correcto, sólo que no puede ser \emph{dicho}, pero se muestra a sí
      mismo. Que el mundo es \emph{mi} mundo, se muestra a sí mismo en el hecho
      de que los limites del lenguaje (de \emph{aquel} lenguaje que yo
      entiendo) significan los límites de mi
      mundo.\footcite[cf~.][p.~89]{tractatus}}

  Así como la lógica del mundo y la verdad del solipsismo quedan mostradas,
  también, las verdades éticas y religiosas, aunque no expresables, se manifiestan
  a sí mismas en la vida.

  Existe, por tanto lo inexpresable que se muestra a sí mismo, esto es lo
  místico.\footcite[cf.~][6.522]{tractatus}

  De la voluntad como sujeto de la ética no podemos
  hablar\footcite[cf.~][6.423]{tractatus}. El mundo es independiente de nuestra
  voluntad ya que no hay conexión lógica entre ésta y los hechos.
  La voluntad y la acción como fenómenos, por tanto, interesan sólo a la
  psicología.\footcite[cf.~][p.171 \S3]{IWT}

  El significado del mundo tiene que estar fuera del
  mundo\footcite[cf.~][6.41]{tractatus} y Dios no se revela \emph{en} el
  mundo\footcite[cf.~][6.432]{tractatus}.
  Esto se sigue de la teoría de la representación; una proposición y su negación
  son ambas posibles, cuál es verdad es accidental.\footcite[cf.~][p.170 \S4]{IWT}
  Si hay un valor que valga la pena para el mundo tiene que estar fuera de lo que
  es el caso que es; lo que hace que el mundo tenga un valor no-accidental tiene
  que estar fuera de lo accidental, tiene que estar fuera del
  mundo.\footcite[cf.~][6.41]{tractatus}

  Finalmente, aplicar el límite de lo que puede ser expresado a la actividad
  filosófica significa que:
  \citalitlar{6.53~El método correcto para la filosofía sería este. No decir nada
      excepto lo que pueda ser dicho, esto es, proposiciones de la ciencia
      natural, es decir, algo que no tiene nada que ver con la filosofía: y luego
      siempre, cuando alguien quiera decir algo metafísico, demostrarle que no ha
      logrado dar significado a ciertos signos en sus proposiciones. Este método
      sería insatisfactorio para la otra persona ---no tendría la impresión de que
      le estuviéramos enseñando filosofía--- pero este método sería el único
      estrictamente correcto.\footcite[p. 107--108]{tractatus}}
  \todo{Añadir como conclusión del resumen la finalidad ética del tratado.}

  \subsection{Formación filosófica de Elizabeth}
  \subsubsection{De Wittgenstein a Anscombe}
  En el 1929 Wittgenstein presentó el Tractatus Logico\=/Philosophicus como su
  tesis doctoral en Cambridge. Ese mismo año fue designado como profesor en
  ``Trinity College'', allí estaría hasta 1936.

  \subsubsection{Causalidad reflexiones iniciales de Anscombe}
  Por aquella época la joven Gertrude Elizabeth Margaret Anscombe, andaba buscando
  un buen argumento que demostrara que todo lo que existe tiene que tener una
  causa. ¿Por qué cuando algo ocurre estamos seguros de que tiene una causa? Nadie
  sabía darle una respuesta. Sin darse cuenta, se había despertado en Anscombe
  una pasión por la filosofía que le acompañaría el resto de su vida.

  El origen de su peculiar curiosidad por la causalidad se hallaba en una obra
  llamada `Teología Natural' escrita por un jesuita del siglo XIX. Había llegado a
  este libro motivada por su conversión a la Iglesia Católica ---fruto, a su vez,
  de lecturas hechas entre los doce y los quince---.\footcite[cf.~][p.~vii \S1]{M&PotM}
  El tratado presentaba un argumento sobre la existencia de la `Causa Primera' y
  como preliminar a éste ofrecía una demostración de un `principio de causalidad'
  según el cual todo cuanto existe tiene que tener una causa. Anscombe notó,
  escasamente escondido en una premisa, un presupuesto de la conclusión del propio
  argumento. Aquel ``petitio principii'' le pareció un simple descuido y resolvió,
  por tanto, escribir una versión mejorada de la demostración.
  Durante los siguientes dos o tres años produjo unas cinco versiones que le
  parecían satisfactorias, sin embargo eventualmente descubría que contenían la
  misma falacia, cada vez disimulada más astutamente.\footcite[cf.~][p.~vii
  \S2]{M&PotM}

  \subsubsection{Oxford: La Percepción y el fenomenalismo de Price}
  Otra inquietud ocuparía sus reflexiones. Esta vez, como fruto de su lectura de
  `The Nature of Belief' de Martin D'Arcy, se interesó por el tema de la
  percepción.
  \begin{revision}
  Estaba segura de que veía objetos, como paquetes de cigarrillos o tazas o\ldots
  cualquier cosa más o menos sustancial servía. Pero estaba más bien concentrada
  en artefactos, como los demás objetos de la vida urbana, y los primeros ejemplos
  mas naturales que le llamaron la atención fueron `madera' y el cielo. Lo segundo
  le golpeó en el centro porque andaba diciendo dogmáticamente que uno debe
  conocer la categoría del objeto del cual uno hablaba ---si era un color o un tipo
  de material, por ejemplo; eso pertenecía a la lógica del termino que uno estaba
  usando. No podía ser una cuestión de descubrimiento empírico el que algo
  perteneciera a una categoría distinta. El cielo la detuvo.

  Durante años ocupaba su tiempo, en cafeterías, por ejemplo, mirando fijamente
  objetos, diciendose a sí misma: 'Veo un paquete. ¿Pero qué veo realmente? ¿Cómo
  puedo decir que veo algo más que una extensión amarilla?

  Fue en las clases de Wittgenstein que el pensamiento central ``Tengo esto, y
  defino `amarillo' como esto'' fue efectivamente atacado.

  En una ocasión en estas clases Wittgenstein estaba discutiendo la
  interpretación del letrero\footcite[p.~86~\S198]{PI}, y estallo en mi que el
  modo en que vas según éste es la interpretación final.

  En otra ocasión salí con ``Pero todavía quiero decir: <<Azul esta ahí>>''.
  Wittgenstein respondió: <<Déjame pensar qué medicina necesitas\ldots>> <<Supón
  que tenemos la palabra `painy' ``(dolorante/doloreño)'', como una palabra para la
  propiedad de ciertas superficies>>. La medicina fue efectiva.
  Si dolorante fuera una palabra posible para una cualidad secundaria, ¿no podría
  el mismo motivo conducirme a decir: Dolorante esta aquí que lo que me condujo a
  decir azul está aquí? Mi expresión no significaba que ``azul'' es el nombre de
  esta sensación que estoy teniendo, ni cambié a ese pensamiento.

  Durante años se le escapaba el tiempo mirando fijamente distintos
  objetos y cuestionandose: <<Veo este objeto, pero ¿qué estoy viendo
  realmente?>>.\footcite[cf.~][p.~viii \S1]{M&PotM}
  \end{revision}

  Después de graduarse de `Sydenham High School' en 1937, se matriculó en `St.
  Hugh's College'. Allí cursó `Literae Humaniores', el programa clásico de Oxford,
  compuesto por literatura clásica, historia y filosofía. Muy pronto se interesó
  por las lecciones de H. H. Price sobre percepción y fenomenalismo. De todos los
  que escuchó en Oxford fue quién le inspiró mayor respeto, no porque estuviera de
  acuerdo con lo que decía, sino porque hablaba de lo que había que hablar. El
  único libro suyo que le pareció realmente bueno fue ``Hume's Theory of the
  External World'' y lo leyó sin interrupción de principio a
  fin. Fue Price quien despertó en ella un intenso interés por el capítulo de Hume
  sobre ``Del escepticismo con respecto a los sentidos''.\footcite[cf.~][p.~viii
  \S1]{M&PotM} El desempeño de Anscombe en las pruebas finales en `St. Hugh's'
  manifestó su clara preferencia por la filosofía. Fue premiada con honores de
  primera clase aún cuando su desempeño en las pruebas de historia fue bastante
  menos que espectacular\footcite[p.~3~\S1]{teichmann}.

  \subsubsection{En Cambrdige con Wittgenstein}
  ANSCOMBE LLEGÓ A CAMBRIDGE EN M42 W. OFRECIA CLASES LOS SÁBADOS Y TRABAJABA EN
  GUY'S. DESDE E43 HASTA E44 NO DIO CLASES. EN M44 EMPEZÓ OTRA VEZ. EN L45 EMPEZÓ
  A TRABAJAR MATERIAL CORRESPONDIENTE A 189-421 PI!!!!!!

  1. Wittgenstein está en época de transición.
  \begin{revision}
  Philosophical Investigations:
  --Undertake an investigation, leading, not to the construction of new and
  surprising theories or explanations, but the examination of our life with
  language. This is a grammatical investigation PI~\S90
  --The ideas of explanation and discovery are misleading and inappropiate when
  applied to questions like: what is meaning?
  --We feel as if we had to repair a spider web with our fingers PI~\S106
  --PI~\S129
  --By putting details together in the right way or by using a new analogy or
  comparison to prompt us to see our practice of using language in a new light, we
  find that we achieve the understanding that we thought would only come with the
  construction of an explanatory account. RFGB, p.30
  --Philosopher's questions must be treated like an illness is treated. PI~\S133
  and \S255.
  --The aim of grammatical investigations is perspicious representation PI~\S122
  --Meaning is use.
  --The question of a philosopher is: how do I go about this?
  \end{revision}

  \begin{revision}
  What marks the transition from early to later Wittgenstein can be summed up as
  the total rejection of dogmatism, i.e., as the working out of all the
  consequences of this rejection. The move from the realm of logic to that of
  ordinary language as the center of the philosopher's attention; from an emphasis
  on definition and analysis to 'family resemblance' and 'language-games'; and
  from systematic philosophical writing to an aphoristic style—all have to do with
  this transition towards anti-dogmatism in its extreme. It is in the
  Philosophical Investigations that the working out of the transitions comes to
  culmination. Other writings of the same period, though, manifest the same
  anti-dogmatic stance, as it is applied, e.g., to the philosophy of mathematics
  or to philosophical psychology.
  \end{revision}

  \begin{revision}
  Philosophical Investigations was published posthumously in 1953. It was edited
  by G. E. M. Anscombe and Rush Rhees and translated by Anscombe. It comprised two
  parts. Part I, consisting of 693 numbered paragraphs, was ready for printing in
  1946, but rescinded from the publisher by Wittgenstein. Part II was added on by
  the editors, trustees of his Nachlass.
  \end{revision}

  \begin{revision}
  ``For a large class of cases of the employment of the word 'meaning'—though not
  for all—this way can be explained in this way: the meaning of a word is its use
  in the language'' (PI 43). This basic statement is what underlies the change of
  perspective most typical of the later phase of Wittgenstein's thought: a change
  from a conception of meaning as representation to a view which looks to use as
  the crux of the investigation.
  \end{revision}

  2. La metodología terapéutica y franca de Wittgenstein fue liberadora
  \begin{revision}

  En 1941 Anscombe se graduó de St. Hugh's College en Oxford y el siguiente año se
  trasladó a Cambridge para sus estudios de posgrado en Newnham College. Cuando
  Wittgenstein regresó a Cambridge en 1944 Anscombe asistió a sus lecciones con
  entusiasmo. Incluso cuando se le concedió una beca de investigación en
  Somerville College en 1946 y regresó a Oxford, todavía durante aquel año y el
  siguiente, viajaba una vez a la semana a Cambridge para encontrarse con
  Wittgenstein.

  El método terapeútico de Wittgenstein tuvo éxito en liberarla de confusiones
  filosóficas donde otras metodologíás mas teoréticas habían fallado. En sus
  estudios en St. Hugh's escuchaba a Price/ldots
  \end{revision}

  \begin{revision}
  :OLD:
  El Tractatus Logico-Philosophicus fue publicado en el 1922 y ciertamente causó
  un impacto en el modo de hacer filosofía. Anscombe emplea la idea de ``corte''
  de Boguslaw Wolniewicz para describir el cambio causado por Wittgenstein. Este
  corte efectuado en la historia de la filosofía por el Tractatus fue atestiguado
  por un filósofo austriaco que describió a Anscombe el efecto cataclísmico
  suscitado narrando cómo profesores largamente consolidados se deshacían de sus
  viejos libros; la tarea consistía ahora en hacer filosofía en el modo indicado
  por el Tractatus y el primer paso era, ciertamente, entenderlo.
  \footcite[p.181]{twocuts}
  \end{revision}

  \begin{revision}
  Este modo de criticar una proposición desvelando que no expresa un pensamiento
  verdadero ilustra los principios propuestos en el \emph{Tractatus} y recuerda
  una de sus tesis más conocidas:
  En el prefacio de las Investigaciones Filosóficas, con fecha de enero de 1945
  Wittgenstein dice que los pensamientos que publica en el libro son el
  precipitado de invetigaciones filosóficas que le han ocupado durante los pasados
  16 años. En enero 1929 Wittgenstein estaba regresando a Cambridge.
  \end{revision}

  \begin{revision}
  En 1953 fue publicado el texto de las investigaciones filosóficas
  En 1982 Anscombe afirma que el con el segundo corte causado por las
  investigaciones filosóficas el proceso analogo al ocurrido con el tractatus
  apenas ha comenzado.
  El 29 de abril de 1951 murió en Cambridge.
  \end{revision}

  \begin{revision}
  En ocasiones como esta la
  discusión con Wittgenstein llevaba a Anscombe a afirmaciones para las cuales no
  podía ofrecer mejor significado que los sugeridos por concepciones ingenuas. Una
  concepción así no es otra cosa que ausencia de pensamiento, pero su falta de
  significado no es evidente, sino que requiere de la fuerza de un `Copérnico'
  para ponerla en cuestión efectivamente.\footcite[cf. 151]{IWT}
  \end{revision}

  \begin{revision}
  En lo concerniente a la filosofía, Wittgenstein siempre tendía a escudriñar las
  reglas del juego, más que jugarlo.
  Anscombe encontró en la filosofía analítica ---en el método de Wittgenstein---
  un método liberador, que le permitió involucrarse en el 'juego' de la filosofía
  con enérgica fortaleza.
  :OLD:
  \end{revision}

  Anscombe conoció a Wittgenstein en los años culminantes de su pensamiento
  filosófico. Comenzó a asistir a sus lecciones en el trimestre 'michaelmas' de
  1942. Eran unos diez estudiantes en clase, y la materia discutida era sobre los
  fundamentos de las matemáticas. En abril de 1943 Wittgenstein interrumpió sus
  clases para unirse a los esfuerzos por atender los daños de la Segunda Guerra
  Mundial trabajando en 'Guy's Hospital' en Newscastle. Regresó a Cambridge en
  octubre de 1944 y el 16 del mismo mes reanudó sus lecciones con seis
  estudiantes, Anscombe entre ellos. Los temas trabajados en estas lecciones son
  correspondientes con los números \S189--\S241 de 'Philosophical Investigations'.
  En el curso 1945--1946 Elizabeth asistió junto a otros dieciocho estudiantes a
  lecciones sobre filosofía de la psicología. El curso de 1946--1947 fue el último
  término de lecciones ofrecidas por Wittgenstein en Cambridge antes de su retiro
  en octubre de 1947. Durante ese curso le dedicó una tarde a la semana a Anscombe
  y W. A. Hijab en lecciones sobre filosofía de la religión.

  Al comienzo de sus lecciones en 1944 Wittgenstein escribía a su amigo Rush Rhees:
  \citalitinterlin{
      \ldots mis clases no han ido tan mal. Thouless esta asistiendo, y una mujer,
      'Mrs so and so'
      que se llama a sí misma
      'Miss Anscombe',
      que ciertamente es inteligente, aunque no del calibre de Kreisel.
      \footcite[p.~371]{cambridgeletters}
  }
  Un año mas tarde escribía a Norman Malcolm:
  \citalitinterlin{
      \ldots mi clase ahora es bastante grande, 19 personas. \ldots Smythies esta
      viniendo, y una mujer que es muy buena, es decir, más que solamente
      inteligente\ldots
      \footcite[p.~388]{cambridgeletters}
  }
  Aquellos años no sólo creció en Wittgenstein la apreciación de la capacidad de
  Anscombe, sino que se afianzó entre ellos una estrecha amistad.

  La influencia de Wittgenstein fue decisiva para el desarrollo filosófico de
  Elizabeth. Las lecciones con Wittgenstein eran directas y con franqueza. Esta
  metodología carente de cualquier parafernalia era inquietante para algunos,
  inspiradora para otros, pero fue tremendamente liberadora para
  ella.\footcite[loc 9853 Chapter 4, Section 24, \S5]{monk} Esta libertad
  quedaba demostrada en que Anscombe no se contentaba con repetir lo que decía
  Wittgenstein, sino que pensaba por sí misma; en esto precisamente era más fiel
  al espíritu de la filosofía que había aprendido de él. Sobre esta relación,
  Phillipa Foot, amiga de ambos, cuenta que durante mucho tiempo sostuvo
  objeciones a las afirmaciones de Wittgenstein, eventualmente, un comentario de
  Norman Malcom la hizo pensar que podía haber valor en lo que Wittgenstein decía.
  Cuestionó entonces a Anscombe:
  ``¿Por qué no me dijiste?'', ella le contestó: ``Porque es importante que uno
  tenga sus resistencias''. Anscombe evidentemente pensaba ---continúa Foot:
  \citalitlar{
      que un largo periodo de vigorosa objeción era la mejor manera de entender a
      Wittgenstein. Aun cuando era su amiga cercana y albacea literaria, y una de
      los primeros en reconocer su grandeza, nada podía ser más lejano de su
      carácter y modo de pensamiento que el discipulado.\footcite[p.~4]{teichmann}
  }

  \pnote{introducir algunos contrastes y relaciones entre Anscombe y Wittgenstein
      para explicar la incursión en la vida/pensamiento de W.}

  \subsection{Wittgenstein y la fe}
  \todo{En casa de Anscombe, hablando de la fe}
  \todo{From IWT: la verdad de la teoría de la imagen sería el fin de la teología
      natural}
  \todo{Inquietud respecto del esfuerzo de explicar racionalmente la fe}
  \todo{Necesidad de contexto}

  \begin{revision}
  Es una gran bendición para mi poder trabajar hoy. ¡Pero cuán fácilmente olvido
  todas mis bendiciones!
  Estoy leyendo: ``Y ningún hombre puede decir Jesús es el Señor, sino el Espíritu
  Santo.''(1Co 3) Y es cierto: Yo no puedo llamarlo \emph{Señor}; porque eso no me
  dice absolutamente nada. Sí podría llamarlo 'el ejemplo por excelencia', 'Dios'
  incluso o quizás: puedo entenderlo cuando es llamado de ese modo; pero Yo no
  puedo pronunciar la palabra ``Señor'' significativamente. \emph{Porque yo no
  creo} que el vendrá a juzgarme; porque \emph{eso} no me dice nada. Y sólo me
  diría algo si yo viviera de un modo considerablemente distinto.

  ¿Qué me hace inclinarme incluso a mi a creer en la resurrección de Cristo?
  Entretengo la idea por así decirlo. ---Si él no ha resucitado de los muertos,
  entonces se descompuso en la tumba como cualquier otro ser humano. \emph{Esta
  muerto y descompuesto.} En ese caso es un maestro, como cualquier otro y
  entonces ya no puede \emph{ayudar} más; y estamos una vez más huérfanos y solos.
  Y tengo que arreglármelas con la sabiduría y la especulación. Es como si
  estuvieramos en un infierno, en el que solo podemos soñar y estamos dejados
  fuera del cielo, atrapados bajo el techo, diriamos. Pero si REALMENTE voy a ser
  redimido, ---necesito \emph{certeza}--- no sabiduría, sueños, especulación--- y
  esta certeza es la fe. Y fe es fe en lo que mi \emph{corazón}, mi \emph{alma},
  necesita, no mi intelecto especulativo. Pues mi alma, con sus pasiones, con su
  carne y sangre, diría, tiene que ser redimida, no mi mente abstracta. Quizás uno
  podría decir: Sólo el \emph{amor} puede creer la Resurrección. O: es el
  \emph{amor} lo que cree la Resurrección. Uno puede decir: el amor redentor cree
  incluso en la Resurrección; se sostiene firme incluso hasta la Resurrección. Lo
  que lucha con la duda es, por decirlo de algún modo, la redención. Sostenerse
  firmemente en esto tiene que ser mantenerse firme en esta creencia. Así esto
  significa: primero se redimido y sujétate firmemente de tu redención (sostente en tu
  redención) --- entonces veras que a lo que te estás sujetando es a esta
  creencia. Así que esto sólo puede ocurrir si ya no te sujetas de esta tierra,
  sino que te suspendes desde el cielo. Entonces \emph{todo} es distinto y 'no
  será sorpresa' el que puedas hacer entonces lo que ahora no puedes. (Es verdad
  que alguien que está suspendido se ve como alguien que está de pie, pero la
  interacción de fuerzas dentro de él es sin embargo una completamente distinta, y
  de ahí que sea capaz de hacer cosas bastante distintas de las que puede hacer
  alguien que está de pie). (Culture and Value p.38-39 MS 120 108 c: 12.12.1937)
  \end{revision}


text:
title: rabbitHelper.ps1 - AddUserToVHost
linkText: AddUserToVHost
description: Details about the AddUserToVHost function in rabbitHelper.ps1 helper script
---

# AddUserToVHost

```PowerShell
{% raw %}
AddUserToVHost
    [-deployUser] <String>
    [-deployPassword] <String>
    [-rabbitApiUrl] <String>
    [-user] <String>
    [-vHost] <String>
{% endraw %}
```

## Description

Adds an existing user to an existing virtual host.

## Example

```PowerShell
{% raw %}
AddUserToVHost -deployUser "rabbit-deploy" -deployPassword "Secure_Deploy_Password" -rabbitApiUrl "http://myrabbitserver:15672/api" -user "MyRabbitUser" -vHost "MyRabbitVHost"
{% endraw %}
```


text:
This gem allows your RSpec tests to behave like Volkswagen tests.

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'rspec-volkswagen'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install rspec-volkswagen

## Usage

After adding the gem to your project, write your tests however the hell you want
to, they'll always pass, speeding up your development cycle!

```ruby
it "behaves like volkswagen tests" do
  expect(1).to eq(2)
end
```

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/jurre/rspec-volkswagen.

## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).


text:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.codepoetics</groupId>
	<artifactId>magicbeans-core</artifactId>
	<packaging>jar</packaging>
	<version>0.1-SNAPSHOT</version>
	<name>magicbeans-core</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.pcollections</groupId>
			<artifactId>pcollections</artifactId>
			<version>2.1.2</version>
		</dependency>

		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>14.0.1</version>
		</dependency>

		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-all</artifactId>
			<version>1.3</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.jmock</groupId>
			<artifactId>jmock-junit4</artifactId>
			<version>2.6.0</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>


text:
package disruptor.advance.a1;

import com.lmax.disruptor.EventTranslator;
import com.lmax.disruptor.dsl.Disruptor;

import java.util.Random;
import java.util.concurrent.CountDownLatch;

public class TradePublisher implements Runnable{
    private CountDownLatch latch;
    private Disruptor<Trade> disruptor;

    public TradePublisher(CountDownLatch latch, Disruptor<Trade> disruptor) {
        this.latch = latch;
        this.disruptor = disruptor;
    }

    @Override
    public void run() {
        try{
            //еÄÌá½»ÈÎÎñ·½Ê½£¬
            //֮ǰ¶¼ÊÇͨ¹ýringbufferÈ¥publish

            //Ìá½»¶à´Î
            for(int i=0; i<1; i++) {
                disruptor.publishEvent(new TradeEventTranslator());
            }
        }finally {
            latch.countDown();
        }

    }
}

class TradeEventTranslator implements EventTranslator<Trade> {

    @Override
    public void translateTo(Trade trade, long l) {
        this.generateTrade(trade);
    }

    private void generateTrade(Trade event) {
        //Éú³É¶©µ¥£¬±àдҵÎñÂß¼
        event.setPrice(new Random().nextDouble() * 9999);
    }
}


text:
// Copyright (c) 2009-2015 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

#include "checkpoints.h"

#include "chain.h"
#include "chainparams.h"
#include "main.h"
#include "uint256.h"

#include <stdint.h>

#include <boost/foreach.hpp>

namespace Checkpoints {

    /**
     * How many times slower we expect checking transactions after the last
     * checkpoint to be (from checking signatures, which is skipped up to the
     * last checkpoint). This number is a compromise, as it can't be accurate
     * for every system. When reindexing from a fast disk with a slow CPU, it
     * can be up to 20, while when downloading from a slow network with a
     * fast multicore CPU, it won't be much higher than 1.
     */
    static const double SIGCHECK_VERIFICATION_FACTOR = 5.0;

<<<<<<< HEAD
    bool fEnabled = true;

<<<<<<< HEAD
=======
    // What makes a good checkpoint block?
    // + Is surrounded by blocks with reasonable timestamps
    //   (no blocks before with a timestamp after, none after with
    //    timestamp before)
    // + Contains no strange transactions
    static MapCheckpoints mapCheckpoints =
        boost::assign::map_list_of
        ( 11111, uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"))
        ( 33333, uint256("0x000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6"))
        ( 74000, uint256("0x0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20"))
        (105000, uint256("0x00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97"))
        (134444, uint256("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"))
        (168000, uint256("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763"))
        (193000, uint256("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317"))
        (210000, uint256("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e"))
        (216116, uint256("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e"))
        (225430, uint256("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932"))
        (250000, uint256("0x000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214"))
        (279000, uint256("0x0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40"))
        (295000, uint256("0x00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983"))
        ;
    static const CCheckpointData data = {
        &mapCheckpoints,
        1397080064, // * UNIX timestamp of last checkpoint block
        36544669,   // * total number of transactions between genesis and last checkpoint
                    //   (the tx=... number in the SetBestChain debug.log lines)
        60000.0     // * estimated number of transactions per day after checkpoint
    };

    static MapCheckpoints mapCheckpointsTestnet =
        boost::assign::map_list_of
        ( 546, uint256("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70"))
        ;
    static const CCheckpointData dataTestnet = {
        &mapCheckpointsTestnet,
        1338180505,
        16341,
        300
    };

    static MapCheckpoints mapCheckpointsRegtest =
        boost::assign::map_list_of
        ( 0, uint256("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"))
        ;
    static const CCheckpointData dataRegtest = {
        &mapCheckpointsRegtest,
        0,
        0,
        0
    };

    const CCheckpointData &Checkpoints() {
        if (Params().NetworkID() == CChainParams::TESTNET)
            return dataTestnet;
        else if (Params().NetworkID() == CChainParams::MAIN)
            return data;
        else
            return dataRegtest;
    }

>>>>>>> 5b9f78d69ccf189bebe894b1921e34417103a046
    bool CheckBlock(int nHeight, const uint256& hash)
    {
        if (!fEnabled)
            return true;

        const MapCheckpoints& checkpoints = *Params().Checkpoints().mapCheckpoints;

        MapCheckpoints::const_iterator i = checkpoints.find(nHeight);
        if (i == checkpoints.end()) return true;
        return hash == i->second;
    }

=======
>>>>>>> 80d1f2e48364f05b2cdf44239b3a1faa0277e58e
    //! Guess how far we are in the verification process at the given block index
    double GuessVerificationProgress(const CCheckpointData& data, CBlockIndex *pindex, bool fSigchecks) {
        if (pindex==NULL)
            return 0.0;

        int64_t nNow = time(NULL);

        double fSigcheckVerificationFactor = fSigchecks ? SIGCHECK_VERIFICATION_FACTOR : 1.0;
        double fWorkBefore = 0.0; // Amount of work done before pindex
        double fWorkAfter = 0.0;  // Amount of work left after pindex (estimated)
        // Work is defined as: 1.0 per transaction before the last checkpoint, and
        // fSigcheckVerificationFactor per transaction after.

        if (pindex->nChainTx <= data.nTransactionsLastCheckpoint) {
            double nCheapBefore = pindex->nChainTx;
            double nCheapAfter = data.nTransactionsLastCheckpoint - pindex->nChainTx;
            double nExpensiveAfter = (nNow - data.nTimeLastCheckpoint)/86400.0*data.fTransactionsPerDay;
            fWorkBefore = nCheapBefore;
            fWorkAfter = nCheapAfter + nExpensiveAfter*fSigcheckVerificationFactor;
        } else {
            double nCheapBefore = data.nTransactionsLastCheckpoint;
            double nExpensiveBefore = pindex->nChainTx - data.nTransactionsLastCheckpoint;
            double nExpensiveAfter = (nNow - pindex->GetBlockTime())/86400.0*data.fTransactionsPerDay;
            fWorkBefore = nCheapBefore + nExpensiveBefore*fSigcheckVerificationFactor;
            fWorkAfter = nExpensiveAfter*fSigcheckVerificationFactor;
        }

        return fWorkBefore / (fWorkBefore + fWorkAfter);
    }

    int GetTotalBlocksEstimate(const CCheckpointData& data)
    {
        const MapCheckpoints& checkpoints = data.mapCheckpoints;

        if (checkpoints.empty())
            return 0;

        return checkpoints.rbegin()->first;
    }

    CBlockIndex* GetLastCheckpoint(const CCheckpointData& data)
    {
        const MapCheckpoints& checkpoints = data.mapCheckpoints;

        BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints)
        {
            const uint256& hash = i.second;
            BlockMap::const_iterator t = mapBlockIndex.find(hash);
            if (t != mapBlockIndex.end())
                return t->second;
        }
        return NULL;
    }

} // namespace Checkpoints