text:
layout: post
title: Redis Learn-17-01-Lua 脚本 Eval
date: 2018-12-12 11:35:23 +0800
categories: [Redis]
tags: [redis, cache, lua, sh]
published: true
---

# 支持情况

Available since 2.6.0.

Time complexity(复杂度): Depends on the script that is executed.

# Introduction to EVAL

EVAL and EVALSHA are used to evaluate scripts using the Lua interpreter(解释器) built into Redis starting from version 2.6.0.

## 参数介绍

The first argument of EVAL is a Lua 5.1 script.

The script does not need to define a Lua function (and should not).

It is just a Lua program that will run in the context of the Redis server.

The second argument of EVAL is the number of arguments that follows the script (starting from the third argument) that represent Redis key names.

The arguments can be accessed by Lua using the KEYS global variable in the form of a one-based array (so KEYS[1], KEYS[2], ...).

All the additional arguments should not represent(重复) key names and can be accessed by Lua using the ARGV global variable, very similarly to what happens with keys (so ARGV[1], ARGV[2], ...).

## 例子

The following example should clarify(解释说明) what stated above:

```
> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"
```

### 注意

Note: as you can see Lua arrays are returned as Redis multi bulk replies(多批量回复), that is a Redis return type that your client library will likely convert into an Array type in your programming language.

It is possible to call Redis commands from a Lua script using two different Lua functions:

# 调用方式

## 两种方式的异同

It is possible to call Redis commands from a Lua script using two different Lua functions:

```
redis.call()
redis.pcall()
```

redis.call() is similar to redis.pcall(), the only difference is that if a Redis command call will result in an error.

redis.call() will raise a Lua error that in turn will force EVAL to return an error to the command caller,
while redis.pcall() will trap the error and return a Lua table representing the error.

- trap the error

个人理解是捕获这个异常(为异常设置一个陷阱),然后返回一个 lua 的 table 来展示异常。

## 参数

The arguments of the redis.call() and redis.pcall() functions are all the arguments of a well formed(形成) Redis command:

```
> eval "return redis.call('set','foo','bar')" 0
OK
```

The above script sets the key foo to the string bar.

However it violates(违反) the EVAL command semantics(语义) as all the keys that the script uses should be passed using the KEYS array:

```
> eval "return redis.call('set',KEYS[1],'bar')" 1 foo
OK
```

All Redis commands must be analyzed before execution to determine(确定) which keys the command will operate on.

In order for this to be true for EVAL, keys must be passed explicitly. (显式传递)

This is useful in many ways, but especially to make sure Redis Cluster can forward your request to the appropriate cluster node.

Note this rule is not enforced in order to provide the user with opportunities(机会) to abuse the Redis single instance configuration, at the cost of writing scripts not compatible with Redis Cluster.

# Conversion between Lua and Redis data types

## 类型转换

Lua scripts can return a value that is converted from the Lua type to the Redis protocol using a set of conversion rules.

Redis return values are converted into Lua data types when Lua calls a Redis command using call() or pcall().

Similarly, Lua data types are converted into the Redis protocol when calling a Redis command and when a Lua script returns a value, so that scripts can control what EVAL will return to the client.

This conversion between data types is designed in a way that if a Redis type is converted into a Lua type, and then the result is converted back into a Redis type, the result is the same as the initial value.

In other words there is a one-to-one(一一对应) conversion between Lua and Redis types.

- 个人理解

其实和 jdbc 与数据库的类型转换类似,不同设计之间的语言都需要一种转换方式,这种方式必须在一定的规则之下,是固定的。

不然会引起混乱。

## 转换规则

The following table shows you all the conversions rules:

### Redis to Lua conversion table.

```
Redis integer reply -> Lua number
Redis bulk reply -> Lua string
Redis multi bulk reply -> Lua table (may have other Redis data types nested)
Redis status reply -> Lua table with a single ok field containing the status
Redis error reply -> Lua table with a single err field containing the error
Redis Nil bulk reply and Nil multi bulk reply -> Lua false boolean type
```

### Lua to Redis conversion table.

```
Lua number -> Redis integer reply (the number is converted into an integer)
Lua string -> Redis bulk reply
Lua table (array) -> Redis multi bulk reply (truncated to the first nil inside the Lua array if any)
Lua table with a single ok field -> Redis status reply
Lua table with a single err field -> Redis error reply
Lua boolean false -> Redis Nil bulk reply.
```

There is an additional Lua-to-Redis conversion rule that has no corresponding(一致性) Redis to Lua conversion rule:

```
Lua boolean true -> Redis integer reply with value of 1.
```

### 注意点

Also there are two important rules to note:

1)Lua has a single numerical type, Lua numbers.

There is no distinction between integers and floats.

So we always convert Lua numbers into integer replies, removing the decimal part of the number if any.

If you want to return a float from Lua you should return it as a string, exactly like Redis itself does (see for instance the ZSCORE command).

2)There is no simple way to have nils inside Lua arrays, this is a result of Lua table semantics, so when Redis converts a Lua array into Redis protocol the conversion is stopped if a nil is encountered.

ps: 这两点应该都是 lua 脚本本身的特性决定的。

## 转换例子

- 确切的返回值

```
> eval "return 10" 0
(integer) 10

> eval "return {1,2,{3,'Hello World!'}}" 0
1) (integer) 1
2) (integer) 2
3) 1) (integer) 3
   2) "Hello World!"

> eval "return redis.call('get','foo')" 0
"bar"
```

The last example shows how it is possible to receive the exact return value of redis.call() or redis.pcall() from Lua that would be returned if the command was called directly.

- float 与数组空值的处理

In the following example we can see how floats and arrays with nils are handled:

```
> eval "return {1,2,3.3333,'foo',nil,'bar'}" 0
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) "foo"
```

As you can see 3.333 is converted into 3, and the bar string is never returned as there is a nil before.

ps: 这里处理数组,如果遇到 nil,后面的信息直接就停止解析了。(when Redis converts a Lua array into Redis protocol the conversion is stopped if a nil is encountered.)

## Helper functions to return Redis types

There are two helper functions to return Redis types from Lua.

`redis.error_reply(error_string)` returns an error reply.

This function simply returns a single field table with the err field set to the specified string for you.

`redis.status_reply(status_string)` returns a status reply.

This function simply returns a single field table with the ok field set to the specified string for you.

### 使用帮助类和直接返回的等价性

There is no difference between using the helper functions or directly returning the table with the specified format, so the following two forms are equivalent:

```
return {err="My Error"}
return redis.error_reply("My Error")
```

# Atomicity of scripts

Redis uses the same Lua interpreter to run all the commands.

Also Redis guarantees(担保) that a script is executed in an atomic way: no other script or Redis command will be executed while a script is being executed.

This semantic is similar to the one of `MULTI/EXEC`.

From the point of view of all the other clients the effects of a script are either still not visible or already completed.

However this also means that executing slow scripts is not a good idea.

It is not hard to create fast scripts, as the script overhead is very low, but if you are going to use slow scripts you should be aware that while the script is running no other client can execute commands.

## 优点

执行时,redis 保证原子性。

## 注意

正因为保证原子性(执行时,不会有其他命令被同时执行),加上 redis 本身是单线程的。

换句话说,执行脚本的时候,其他命令都会被阻塞,所以作者说不要执行慢脚本。

# Error handling

As already stated, calls to redis.call() resulting in a Redis command error will stop the execution of the script and return an error, in a way that makes it obvious(明显地) that the error was generated by a script:

```
> del foo
(integer) 1
> lpush foo a
(integer) 1
> eval "return redis.call('get','foo')" 0
(error) ERR Error running script (call to f_6b1bf486c81ceb7edf3c093f4c48582e38c0e791): ERR Operation against a key holding the wrong kind of value
```

Using redis.pcall() no error is raised, but an error object is returned in the format specified above (as a Lua table with an err field).

The script can pass the exact error to the user by returning the error object returned by redis.pcall().

# Bandwidth(带宽) and EVALSHA

The EVAL command forces you to send the script body again and again.

Redis does not need to recompile the script every time as it uses an internal caching mechanism, however paying the cost of the additional bandwidth may not be optimal in many contexts.

## 一些缺陷

On the other hand, defining commands using a special command or via `redis.conf` would be a problem for a few reasons:

1)Different instances may have different implementations of a command.

2)Deployment is hard if we have to make sure all instances contain a given command, especially in a distributed environment.

3)Reading application code, the complete semantics might not be clear since the application calls commands defined server side.

## EVALSHA

In order to avoid these problems while avoiding the bandwidth penalty, Redis implements the `EVALSHA` command.

EVALSHA works exactly like EVAL, but instead of having a script as the first argument it has the SHA1 digest of a script.

ps: SHA 是指 SHA1 hash 算法

### 执行行为

The behavior is the following:

1)If the server still remembers a script with a matching SHA1 digest, the script is executed.

2)If the server does not remember a script with this SHA1 digest, a special error is returned telling the client to use EVAL instead.

## 例子

```
> set foo bar
OK
> eval "return redis.call('get','foo')" 0
"bar"
> evalsha 6b1bf486c81ceb7edf3c093f4c48582e38c0e791 0
"bar"
> evalsha ffffffffffffffffffffffffffffffffffffffff 0
(error) `NOSCRIPT` No matching script. Please use [EVAL](/commands/eval).
```

The client library implementation can always optimistically(乐观地) send EVALSHA under the hood even when the client actually calls EVAL, in the hope the script was already seen by the server.

If the `NOSCRIPT` error is returned EVAL will be used instead.

Passing keys and arguments as additional EVAL arguments is also very useful in this context as the script string remains constant and can be efficiently cached by Redis.

# Script cache semantics

Executed scripts are guaranteed(保证) to be in the script cache of a given execution of a Redis instance forever.

This means that if an EVAL is performed against a Redis instance all the subsequent(随后) EVALSHA calls will succeed.

## 原因解释

The reason why scripts can be cached for long time is that it is unlikely for a well written application to have enough different scripts to cause memory problems.

Every script is conceptually(概念) like the implementation of a new command, and even a large application will likely have just a few hundred of them.

Even if the application is modified many times and scripts will change, the memory used is negligible(微不足道).

- 个人感受

这种针对脚本只会有几百个的假设,可见作者一直是一个乐观务实的人。

乐观使得程序简单,没有过度设计,性能也很快。

## 如何刷新脚本缓存

The only way to flush the script cache is by explicitly calling the `SCRIPT FLUSH` command, which will completely flush the scripts cache removing all the scripts executed so far.

This is usually needed only when the instance is going to be instantiated for another customer or application in a cloud environment.

Also, as already mentioned, restarting a Redis instance flushes the script cache, which is not persistent.

However from the point of view of the client there are only two ways to make sure a Redis instance was not restarted between two different commands.

1)The connection we have with the server is persistent and was never closed so far.

2)The client explicitly checks the runid field in the `INFO` command in order to make sure the server was not restarted and is still the same process.

Practically speaking, for the client it is much better to simply assume that in the context of a given connection, cached scripts are guaranteed to be there unless an administrator explicitly called the SCRIPT FLUSH command.

The fact that the user can count on Redis not removing scripts is semantically(语义) useful in the context of pipelining.

For instance an application with a persistent connection to Redis can be sure that if a script was sent once it is still in memory, so EVALSHA can be used against those scripts in a pipeline without the chance of an error being generated due to an unknown script (we'll see this problem in detail later).

## SCRIPT LOAD

A common pattern is to call `SCRIPT LOAD` to load all the scripts that will appear in a pipeline,
then use `EVALSHA` directly inside the pipeline without any need to check for errors resulting from the script hash not being recognized.

# 脚本命令

Redis offers a SCRIPT command that can be used in order to control the scripting subsystem.

SCRIPT currently accepts three different commands:

## SCRIPT FLUSH

This command is the only way to force Redis to flush the scripts cache.

It is most useful in a cloud environment where the same instance can be reassigned to a different user.

It is also useful for testing client libraries' implementations of the scripting feature.

## SCRIPT EXISTS sha1 sha2 ... shaN

Given a list of SHA1 digests as arguments this command returns an array of 1 or 0, where 1 means the specific SHA1 is recognized as a script already present in the scripting cache, while 0 means that a script with this SHA1 was never seen before (or at least never seen after the latest SCRIPT FLUSH command).

## SCRIPT LOAD script

This command registers the specified script in the Redis script cache. The command is useful in all the contexts where we want to make sure that EVALSHA will not fail (for instance during a pipeline or MULTI/EXEC operation), without the need to actually execute the script.

## SCRIPT KILL

This command is the only way to interrupt a long-running script that reaches the configured maximum execution time for scripts.

The SCRIPT KILL command can only be used with scripts that did not modify the dataset during their execution (since stopping a read-only script does not violate the scripting engine's guaranteed atomicity).

See the next sections for more information about long running scripts.

# Scripts as pure functions

- 注意

starting with Redis 5, scripts are always replicated as effects and not sending the script verbatim(逐字).

So the following section is mostly applicable to Redis version 4 or older.

A very important part of scripting is writing scripts that are pure functions.

## 传播方式及其优缺点

Scripts executed in a Redis instance are, by default, propagated(传播) to replicas(副本) and to the AOF file by sending the script itself -- not the resulting commands.

The reason is that sending a script to another Redis instance is often much faster than sending the multiple commands the script generates, so if the client is sending many scripts to the master, converting the scripts into individual commands for the replica / AOF would result in too much bandwidth for the replication link or the Append Only File (and also too much CPU since dispatching a command received via network is a lot more work for Redis compared to dispatching a command invoked by Lua scripts).

Normally replicating scripts instead of the effects of the scripts makes sense, however not in all the cases.

So starting with Redis 3.2, the scripting engine is able to, alternatively(可选的), replicate the sequence of write commands resulting from the script execution, instead of replication the script itself.

See the next section for more information.

# 备份整个脚本

In this section we'll assume that scripts are replicated by sending the whole script.

Let's call this replication mode whole scripts replication.

The main drawback(缺陷) with the whole scripts replication approach is that scripts are required to have the following property:

1)The script must always evaluates the same Redis write commands with the same arguments given the same input data set.

Operations performed by the script cannot depend on any hidden (non-explicit) information or state that may change as script execution proceeds or between different executions of the script, nor can it depend on any external input from I/O devices.

Things like using the system time, calling Redis random commands like RANDOMKEY, or using Lua random number generator, could result into scripts that will not always evaluate in the same way.

2)Lua does not export commands to access the system time or other external state.

Redis will block the script with an error if a script calls a Redis command able to alter the data set after a Redis random command like RANDOMKEY, SRANDMEMBER, TIME.

This means that if a script is read-only and does not modify the data set it is free to call those commands.

Note that a random command does not necessarily mean a command that uses random numbers: any non-deterministic(非确定性) command is considered a random command (the best example in this regard is the TIME command).

3)In Redis version 4, commands that may return elements **in random order(乱序)**, like SMEMBERS (because Redis Sets are unordered) have a different behavior when called from Lua, and undergo a silent lexicographical(词典) sorting filter before returning data to Lua scripts.

So `redis.call("smembers",KEYS[1])` will always return the Set elements in the same order, while the same command invoked from normal clients may return different results even if the key contains exactly the same elements.

However starting with Redis 5 there is no longer such ordering step, because Redis 5 replicates scripts in a way that no longer needs non-deterministic commands to be converted into deterministic ones.

In general, even when developing for Redis 4, never assume that certain commands in Lua will be ordered, but instead rely on the documentation of the original command you call to see the properties it provides.

- 个人感受

确定的参数,却返回无序的结果。

这是一种比较严重的问题。

因为编程,就是在这个不确定的世界追求一部分的确定性。

4)Lua pseudo(伪) random number generation functions math.random and math.randomseed are modified in order to always have the same seed every time a new script is executed.

This means that calling math.random will always generate the same sequence of numbers every time a script is executed if math.randomseed is not used.

## 随机函数问题

However the user is still able to write commands with random behavior using the following simple trick.

Imagine I want to write a Redis script that will populate a list with N random integers.

### 默认情况

I can start with this small Ruby program:

```ruby
require 'rubygems'
require 'redis'

r = Redis.new

RandomPushScript = <<EOF
    local i = tonumber(ARGV[1])
    local res
    while (i > 0) do
        res = redis.call('lpush',KEYS[1],math.random())
        i = i-1
    end
    return res
EOF

r.del(:mylist)
puts r.eval(RandomPushScript,[:mylist],[10,rand(2**32)])
```

Every time this script executed the resulting list will have exactly the following elements:

```
> lrange mylist 0 -1
 1) "0.74509509873814"
 2) "0.87390407681181"
 3) "0.36876626981831"
 4) "0.6921941534114"
 5) "0.7857992587545"
 6) "0.57730350670279"
 7) "0.87046522734243"
 8) "0.09637165539729"
 9) "0.74990198051087"
10) "0.17082803611217"
```

### 如何使得结果变化?

In order to make it a pure function, but still be sure that every invocation of the script will result in different random elements, we can simply add an additional argument to the script that will be used in order to seed the Lua pseudo-random number generator.

The new script is as follows:

```ruby
RandomPushScript = <<EOF
    local i = tonumber(ARGV[1])
    local res
    math.randomseed(tonumber(ARGV[2]))
    while (i > 0) do
        res = redis.call('lpush',KEYS[1],math.random())
        i = i-1
    end
    return res
EOF

r.del(:mylist)
puts r.eval(RandomPushScript,1,:mylist,10,rand(2**32))
```

What we are doing here is sending the seed of the PRNG as one of the arguments.

This way the script output will be the same given the same arguments, but we are changing one of the arguments in every invocation, generating the random seed client-side.

The seed will be propagated(传播) as one of the arguments both in the replication link and in the Append Only File, guaranteeing(担保) that the same changes will be generated when the AOF is reloaded or when the replica processes the script.

Note: an important part of this behavior is that the PRNG that Redis implements as `math.random` and `math.randomseed` is guaranteed to have the same output regardless of the architecture of the system running Redis. 32-bit, 64-bit, big-endian and little-endian systems will all produce the same output.

# Replicating commands instead of scripts

## script effects replication

Note: starting with Redis 5, the replication method described in this section (scripts effects replication) is the default and does not need to be explicitly enabled.

Starting with Redis 3.2, it is possible to select an alternative replication method.

Instead of replication whole scripts, we can just replicate single write commands generated by the script.

We call this **script effects replication.**

- 个人理解

比起备份所有的脚本,不如直接备份脚本产生影响的脚本来的更加高效。

## 适用场景

This is useful in several ways depending on the use case:

1)When the script is slow to compute, but the effects can be summarized by a few write commands, it is a shame to re-compute the script on the replicas or when reloading the AOF. In this case to replicate just the effect of the script is much better.

2)When script effects replication is enabled, the controls about non deterministic functions are disabled.

You can, for example, use the TIME or SRANDMEMBER commands inside your scripts freely at any place.

3)The Lua PRNG in this mode is seeded randomly at every call.

## 如何开启

In order to enable script effects replication, you need to issue the following Lua command before any write operated by the script:

```
redis.replicate_commands()
```

The function returns true if the script effects replication was enabled, otherwise if the function was called after the script already called some write command, it returns false, and normal whole script replication is used.

ps: 如果开启了,则直接使用 `script effects replication`。或者直接使用整个脚本备份。

# Selective replication of commands

When script effects replication is selected (see the previous section), it is possible to have more control in the way commands are replicated to replicas and AOF.

This is a very advanced feature since a misuse(滥用) can do damage by breaking the contract that the master, replicas, and AOF, all must contain the same logical content.

## 应用场景

However this is a useful feature since, sometimes, we need to execute certain commands only in the master in order to create, for example, intermediate(中间) values.

Think at a Lua script where we perform an intersection between two sets.

Pick five random elements, and create a new set with this five random elements.

Finally we delete the temporary key representing the intersection between the two original sets.

What we want to replicate is only the creation of the new set with the five elements.

It's not useful to also replicate the commands creating the temporary key.

## 命令简介

For this reason, Redis 3.2 introduces a new command that only works when script effects replication is enabled, and is able to control the scripting replication engine.

The command is called `redis.set_repl()` and fails raising an error if called when script effects replication is disabled.

The command can be called with four different arguments:

```
redis.set_repl(redis.REPL_ALL) -- Replicate to AOF and replicas.
redis.set_repl(redis.REPL_AOF) -- Replicate only to AOF.
redis.set_repl(redis.REPL_REPLICA) -- Replicate only to replicas (Redis >= 5)
redis.set_repl(redis.REPL_SLAVE) -- Used for backward compatibility, the same as REPL_REPLICA.
redis.set_repl(redis.REPL_NONE) -- Don't replicate at all.
```

By default the scripting engine is always set to `REPL_ALL`.

By calling this function the user can switch on/off AOF and or replicas propagation, and turn them back later at her/his wish.

## 使用例子

A simple example follows:

```
redis.replicate_commands() -- Enable effects replication.
redis.call('set','A','1')
redis.set_repl(redis.REPL_NONE)
redis.call('set','B','2')
redis.set_repl(redis.REPL_ALL)
redis.call('set','C','3')
```

After running the above script, the result is that only keys A and C will be created on replicas and AOF.

ps: 因为默认就是 `REPL_ALL`。

# Global variables protection

Redis scripts are not allowed to create global variables, in order to avoid leaking data into the Lua state.

If a script needs to maintain state between calls (a pretty uncommon need) it should use Redis keys instead.

When global variable access is attempted(尝试) the script is terminated and EVAL returns with an error:

```
redis 127.0.0.1:6379> eval 'a=10' 0
(error) ERR Error running script (call to f_933044db579a2f8fd45d8065f04a8d0249383e57): user_script:1: Script attempted to create global variable 'a'
```

Accessing a non existing global variable generates a similar error.

Using Lua debugging functionality or other approaches like altering the meta table used to implement global protections in order to circumvent(规避) globals protection is not hard.

However it is difficult to do it accidentally(偶然).

If the user messes(混乱) with the Lua global state, the consistency(一致性) of AOF and replication is not guaranteed: don't do it.

Note for Lua newbies(新手): in order to avoid using global variables in your scripts simply declare every variable you are going to use using the local keyword.

# Using SELECT inside scripts

It is possible to call `SELECT` inside Lua scripts like with normal clients, However one subtle(微妙) aspect of the behavior changes between Redis 2.8.11 and Redis 2.8.12.

Before the 2.8.12 release the database selected by the Lua script was transferred to the calling script as current database.

Starting from Redis 2.8.12 the database selected by the Lua script only affects the execution of the script itself, but does not modify the database selected by the client calling the script.

The semantic(语义) change between patch(补丁) level releases was needed since the old behavior was inherently incompatible with the Redis replication layer and was the cause of bugs.

# Available libraries

The Redis Lua interpreter loads the following Lua libraries:

```
base lib.
table lib.
string lib.
math lib.
struct lib.
cjson lib.
cmsgpack lib.
bitop lib.
redis.sha1hex function.
redis.breakpoint and redis.debug function in the context of the Redis Lua debugger.
```

Every Redis instance is guaranteed to have all the above libraries so you can be sure that the environment for your Redis scripts is always the same.

## 数据结构

struct, CJSON and cmsgpack are external libraries, all the other libraries are standard Lua libraries.

struct is a library for packing/unpacking structures within Lua.

```
Valid formats:
> - big endian
< - little endian
![num] - alignment
x - pading
b/B - signed/unsigned byte
h/H - signed/unsigned short
l/L - signed/unsigned long
T   - size_t
i/In - signed/unsigned integer with size `n' (default is size of int)
cn - sequence of `n' chars (from/to a string); when packing, n==0 means
     the whole string; when unpacking, n==0 means use the previous
     read number as the string length
s - zero-terminated string
f - float
d - double
' ' - ignored
```

### 例子

Example:

```
127.0.0.1:6379> eval 'return struct.pack("HH", 1, 2)' 0
"\x01\x00\x02\x00"
127.0.0.1:6379> eval 'return {struct.unpack("HH", ARGV[1])}' 0 "\x01\x00\x02\x00"
1) (integer) 1
2) (integer) 2
3) (integer) 5
127.0.0.1:6379> eval 'return struct.size("HH")' 0
(integer) 4
```

## CJSON

The CJSON library provides extremely fast JSON manipulation within Lua.

Example:

```
redis 127.0.0.1:6379> eval 'return cjson.encode({["foo"]= "bar"})' 0
"{\"foo\":\"bar\"}"
redis 127.0.0.1:6379> eval 'return cjson.decode(ARGV[1])["foo"]' 0 "{\"foo\":\"bar\"}"
"bar"
```

## cmsgpack

The cmsgpack library provides simple and fast MessagePack manipulation within Lua.

- Example:

```
127.0.0.1:6379> eval 'return cmsgpack.pack({"foo", "bar", "baz"})' 0
"\x93\xa3foo\xa3bar\xa3baz"
127.0.0.1:6379> eval 'return cmsgpack.unpack(ARGV[1])' 0 "\x93\xa3foo\xa3bar\xa3baz"
1) "foo"
2) "bar"
3) "baz"
```

## bitop

The Lua Bit Operations Module adds bitwise operations on numbers.

It is available for scripting in Redis since version 2.8.18.

Example:

```
127.0.0.1:6379> eval 'return bit.tobit(1)' 0
(integer) 1
127.0.0.1:6379> eval 'return bit.bor(1,2,4,8,16,32,64,128)' 0
(integer) 255
127.0.0.1:6379> eval 'return bit.tohex(422342)' 0
"000671c6"
```

It supports several other functions: bit.tobit, bit.tohex, bit.bnot, bit.band, bit.bor, bit.bxor, bit.lshift, bit.rshift, bit.arshift, bit.rol, bit.ror, bit.bswap.

All available functions are documented in the Lua BitOp documentation

## redis.sha1hex

Perform the SHA1 of the input string.

Example:

```
127.0.0.1:6379> eval 'return redis.sha1hex(ARGV[1])' 0 "foo"
"0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
```

# Emitting(播散) Redis logs from scripts

It is possible to write to the Redis log file from Lua scripts using the redis.log function.

```
redis.log(loglevel,message)
```

## 日志级别

loglevel is one of:

```
redis.LOG_DEBUG
redis.LOG_VERBOSE
redis.LOG_NOTICE
redis.LOG_WARNING
```

They correspond directly to the normal Redis log levels.

Only logs emitted by scripting using a log level that is equal or greater than the currently configured Redis instance log level will be emitted.

The message argument is simply a string.

## 例子

Example:

```
redis.log(redis.LOG_WARNING,"Something is wrong with this script.")
```

结果

```
[32343] 22 Mar 15:21:39 # Something is wrong with this script.
```

# Sandbox and maximum execution time

## 执行沙盒

Scripts should never try to access the external system, like the file system or any other system call.

A script should only operate on Redis data and passed arguments.

## 最大执行时间

Scripts are also subject to a maximum execution time (five seconds by default).

This default timeout is huge since a script should usually run in under a millisecond.

The limit is mostly to handle accidental infinite loops created during development.

It is possible to modify the maximum time a script can be executed with millisecond precision,
either via `redis.conf` or using the `CONFIG GET/CONFIG SET` command.

The configuration parameter affecting max execution time is called lua-time-limit.

When a script reaches the timeout it is not automatically terminated by Redis since this violates the contract Redis has with the scripting engine to ensure that scripts are atomic.

Interrupting a script means potentially(可能) leaving the dataset with half-written data.

## 执行超时会发生什么

For this reasons when a script executes for more than the specified time the following happens:

1)Redis logs that a script is running too long.

2)It starts accepting commands again from other clients, but will reply with a BUSY error to all the clients sending normal commands. The only allowed commands in this status are SCRIPT KILL and SHUTDOWN NOSAVE.

3)It is possible to terminate a script that executes only read-only commands using the SCRIPT KILL command. This does not violate the scripting semantic as no data was yet written to the dataset by the script.

4)If the script already called write commands the only allowed command becomes SHUTDOWN NOSAVE that stops the server without saving the current data set on disk (basically the server is aborted).

# EVALSHA in the context of pipelining

Care should be taken when executing EVALSHA in the context of a pipelined request, since even in a pipeline the order of execution of commands must be guaranteed.

If EVALSHA will return a NOSCRIPT error the command can not be reissued(补偿) later otherwise the order of execution is violated.

The client library implementation should take one of the following approaches:

1)Always use plain EVAL when in the context of a pipeline.

2)Accumulate all the commands to send into the pipeline, then check for EVAL commands and use the SCRIPT EXISTS command to check if all the scripts are already defined. If not, add SCRIPT LOAD commands on top of the pipeline as required, and use EVALSHA for all the EVAL calls.

# Debugging Lua scripts

Starting with Redis 3.2, Redis has support for native Lua debugging.

The Redis Lua debugger is a remote debugger consisting of a server, which is Redis itself, and a client, which is by default redis-cli.

The Lua debugger is described in the Lua scripts debugging section of the Redis documentation.

# 拓展阅读

[Lua 脚本](https://houbb.github.io/2018/09/09/lang-lua)

# 参考资料

[Eval 命令](hhttps://redis.io/commands/eval)

* any list
{:toc}


text:
Subject: Sears Breaks up Assets, Hints at Partial Sale
URL: http://mney.co/1d7ocuO
five + = twelve Required Please enter the correct value.
Sears Breaks up Assets, Hints at Partial Sale
By Mike Caggeso, Money Morning • January 21, 2008
By Mike Caggeso
Sears Holdings Corp. (SHLD) moved one step closer to selling individual units of its assets by dividing them up into independently operated businesses.
The reorganization, first reported Saturday in the Wall Street Journal, led the company to issue a statement confirming the strategy.
"We are introducing an organizational structure that provides operating businesses with greater control, authority and autonomy," the company said in a statement. "Each operating business unit will have a designated leader and an advisory group comprised of senior Sears Holdings executives to provide direction and oversee the business unit's performance."
Details beyond that – how many divisions, who would lead them, when the move would become official – weren't disclosed.
Sears is the parent company of several well-known brand names, including Sears department stores, K-Mart, Kenmore appliances, Craftsman tools, Lands End clothing and DieHard batteries.
Sales at/of each of those have been slowly chipped away by the company's vast array of competitors – from Best Buy Co. Inc. (BBY) to The Home Depot Inc. (HD).
Faced with a very unstable economy and disappointing retail sales nationwide, selling any of its brands would create some much-needed revenue, as Sears is coming off one of its worse years ever – easily its worse since billionaire hedge fund manager Edward Lampert took controlling stake, 48%, in the company in March 2005.
In late November, the suburban-Chicago-based company reported that third-quarter profit dropped 99% compared with the previous year. And last week, the company said that fourth quarter earnings per share (EPS) are expected to decline 35% to 51%.
"It seems to me this is more like asset management than brand management," Neil Stern, partner at McMillan Doolittle, a Chicago-based retail consulting firm, told the Chicago Tribune. "It would make it easier to sell the parts in pieces, but harder to run as a retail company."
News and Related Links:
Wall Street Journal:
Flagging Sears Plans Shakeup In Latest Bid at Turnaround
Money Morning:
2007: The Worst Holiday Shopping Season in Five Years?
Edward Lampert
Chicago Tribune:
Sears to shift to independently run units
Tags: Mike Caggeso, Sears

redpajama_set_name: RedPajamaCommonCrawl


Welcome to the Bacon Revue. It has been a long time since we have opened the curtains and showcased some bacon. Today's act,' Schreiners Fine Sausages' comes from Glendale in 'So-Cal'. We visited this fine establishment while on our journey to Harry Soo's barbeque class. This meat market has been smoking and curing its fine meat products since 1952. Schreiners is a colorful and festive establishment. The female employees all dress in dirndls, the traditional dresses worn in Austria and southern Germany.
Schreiners Fines Sausages is a well stocked meat market and delicatessen. It was quit popular with people buying sandwiches during our visit. The employees are more than welcome to give you samples of all the various cured meat delights. Knockwurst, Bratwurst, hams, bacon's, so many different sausages, and fresh meats, but today our show is about the bacon.
The bacon was packaged in shrink-wrap for traveling. Once the slab was freed from its protective case a beautiful smoky aroma emerged to tease our taste buds. This was a beautiful looking slab. The meat to fat ratio was even. No rind is always a plus in my book. The bacon sizzled and popped as the show required. This was a good balanced piece of pork belly. Salt and sugar were present but not overpowering. The smoke was a complimenting component. It is always about the balance. This bacon is solid all the way around. Some cooked slices and left over fat was used in our 'Warm Bacon Coleslaw" recipe listed below.
Combine cabbage, carrots, onions in a bowl . In the skillet that you cooked your bacon, add mustard, olive oil, vinegar and reserved bacon, sugar, salt & pepper. Heat till very hot. Remove from heat and stir into cabbage mixture. Top with chopped bacon pieces and serve immediately.
Cabbage and bacon are two great ingredients alone but when they are combined they are a star on the stage of the Bacon Revue. This was served as a side dish to our grilled steak. I hope you enjoyed the 'Bacon Revue" today. If you plan to visit 'So-Cal' be sure to visit Schreiners. You will want to bring an empty ice chest for all your meat finds. Today's bacon was well balanced in all the right flavor components and will receive 4 stars out of 5.
Where: 3417 Ocean View Blvd.
Wow... that is a plate of food! Bacon in coleslaw I will be making that.
Me like your coleslaw recipe.
Whoops, time to cure me some more belly.
Greg, This may even be health food. The cabbage counters the bacon fat.
cookiecrumb, I am going to by a belly next month from a pig farmer in Woodland. Hopefuly the tomato's will be ready.


text:
Expansion Management>Industry Clusters
P&G Expands Louisiana Plant to Produce New Product
$100 million investment adds 105 new direct jobs with a potential 567 indirect jobs
Edited by Adrienne Selko | Mar 14, 2012
Last week, P&G's Pineville fabric care facility completed its $100 million expansion, which enables the plant to deliver a new product, Tide Pods. Tide Pods are a detergent, stain remover and brightener in a three-chamber unit dose form. The three chambers allow a separation of ingredients so that they mix as they dissolve in the wash water. Tide Pods launched in February.
The expansion created 105 new direct jobs with a potential 567 new indirect jobs. The total of 672 new jobs in the Central Louisiana region is in addition to nearly 400 existing P&G jobs that the company retained with the expansion.
"P&G chose to reinvest in Louisiana because of our strong business climate, unparalleled quality of life and most importantly, because of our outstanding workforce," said Gov. Bobby Jindal.
Since 2005, P&G has more than doubled capacity at the Pineville plant. The Pineville site, which opened in 1969, covers nearly 1 million square feet in building space on 112 acres. In addition to Tide, P&G's Pineville production includes Cheer, Gain and Dreft laundry detergents.
TAGS: Companies & Executives Strategic Siting
Food Manufacturing in Chicago Gets a Boost
Shih's Watchword: Make the US an Attractive Choice for Manufacturing
Cincinnati Focuses on Reindustrialization to Create Prosperity
Reshoring has Become an Economic Development Strategy


text:
"Resurrection ecology" is an evolutionary biology technique whereby researchers hatch dormant eggs from lake sediments to study animals as they existed decades ago. It is a new approach that might allow scientists to observe evolution as it occurred, by comparing the animal forms hatched from older eggs with their extant descendants. This technique is particularly important because the live organisms hatched from egg banks can be used to learn about the evolution of behavioural, plastic or competitive traits that are not apparent from more traditional paleontological methods.

One such researcher in the field is W. Charles Kerfoot of Michigan Technological University whose results were published in the journal Limnology and Oceanography. He reported on success in a search for "resting eggs" of zooplankton that are dormant in Portage Lake on Michigan's Upper Peninsula. The lake has undergone a considerable amount of change over the last 100 years including flooding by copper mine debris, dredging, and eutrophication. Others have used this technique to explore the evolutionary effects of eutrophication, predation, and metal contamination. Resurrection ecology provided the best empirical example of the "Red Queen Hypothesis" in nature. Any organism that produces a resting stage can be used for resurrection ecology. However, the most frequently used organism is the water flea, Daphnia. This genus has well-established protocols for lab experimentation and usually asexually reproduces allowing for experiments on many individuals with the same genotype.

Although the more esoteric demonstration of natural selection is alone a valuable aspect of the study described, there is a clear ecological implication in the discovery that very old zooplankton eggs have survived in the lake: the potential still exists, if and when this environment is restored to something of a more pristine nature, for at least some of the original (pre-disturbance) inhabitants to re-establish populations once presumed lost. The genes valuable to survival of those species in a restored environment are still "readily" available and may be quickly assimilated by the modern populations, perhaps requiring no more than a fortuitous disturbance of the bottom.

See also
Limnology
Paleoecology

References

External links
ABC News article about Resurrection Ecology

Evolutionary biology

redpajama_set_name: RedPajamaWikipedia


text:
Marcelo Romero, né le  à Montevideo, est un footballeur international uruguayen évoluant au poste de milieu de terrain.

Entre 1995 et 2004, il est appelé 25 fois en sélection nationale et participe aux Copa América 1997 et 1999 ainsi qu'à la Coupe du monde 2002.

Biographie

Entraîneur
Le , il devient entraîneur du Málaga CF en remplacement de Juande Ramos dont il était l'assistant. Il est démis de ses fonctions le  et il est remplacé par Míchel.

Palmarès

Liens externes

 Fiche de Marcelo Romero sur www.footballdatabase.eu
  Liste des footballeurs internationaux uruguayens sur www.rsssf.com

Naissance en juillet 1976
Naissance à Montevideo
Footballeur international uruguayen
Joueur du Defensor Sporting Club
Joueur du Club Atlético Peñarol
Joueur du Málaga CF
Joueur du North Carolina FC
Entraîneur uruguayen de football
Entraîneur du Málaga CF


Extensive Street Work was done on Fitzwaterb& 23rd earlier this year. The crosswalks were never repainted. Cars fly down the 2200 block of fitz trying to get to the light on Grays Ferry. They do not even stop at the stop sign unless someone is actively in the crosswalk area. It is unsafe and irresponsible for the city to leave crosswalks unpainted for so long in a residential area and this is a particularly bad intersection for stop sign running. Please paint these crosswalks. ASAP!!!
Multiple times a day cars, often traveling at high rates of speed, have near misses with pedestrians crossing Bainbridge St because there is no stop sign for cars traveling north on Schuylkill Avenue and visibility is limited especially when large vehicles are parked in the spaces closest to the intersection. Please install a stop sign here before someone gets seriously injured or killed. Thank you.
The traffic at this intersection has increased considerably since the building out of Naval Square, making this much more of an issue than it was even five years ago.
Do you have any traffic counts or an intersection study that leads you to believe that a stop sign is the best solution instead of removing those parking spaces and "daylighting" the intersection? Or do you just think that the profession of traffic engineering is just the fever dream of a madman?
Today I witnessed a police car not yield to two pedestrians trying to cross this intersection as the cruiser turned right on to Bainbridge. At least the police officer was not speeding like most of the vehicles that treat Schuylkill Ave like an expressway! We definitely need some traffic control in this area to try to reduce the speed of the cars that start accelerating as they come around the corner from Christian Street onto Schuylkill. These are not cars coming from the Naval Square gate - those people are taking a leap of faith when they pull out virtually blind that they won't get hit by a car going 45 miles per hour that just flew around the corner at Christian and is speeding toward Bainbridge in a race to get to the South Street bridge.
I am not sure if this is legal, but it sure is frustrating. The property has a garage that they do not use for parking. Instead the owner uses the spot, where the curb cut, as his own personal parking spot. If that is the case, I feel that spot should be fair game for anyway. I have seen him tow other cars away from the front of his garage just for him to park there himself. I am not sure everyone's feeling on this but if the garage is not used for a car, it should become a legal spot for all - not just the owner. I do not have a garage, but this makes me want to put in a curb cut and a tow sign in front of my house so I can have my own personal spot.
Several houses do this on various blocks on Bainbridge street. The problem is, if you complain and get your way, they will still have their curb cut/garage, but now their extra vehicle will be taking up ANOTHER spot somewhere else on the street. It's annoying that someone with a 2 car garage also gets another spot in front of said garage, but I guess its better than having it parked on another block taking up another spot. I don't think you'll ever get permission to park in front of a garage you don't own, nor should you, but yes I agree its frustrating. I don't know how the PPA knows not to ticket or tow them.
I have been tempted to call the tow company to tow the owner's car away.
As far as I know the shoes are not a sign for anything. Just an eyesore and possible deterrent to anyone looking to buy on the block.
Any suggestions for a tool to cut these down? I think the neighborhood at large should start an initiative to curb this nonsense.
There is a pair on the 1800 block of Carpenter as well. But there is a legitimate drug house on the corner of 19th and Carpenter which is what these shoes are for I think.
I know on Sundays churchgoers are permitted to park in certain areas for free with no tickets, but it is my understanding that this does not include sidewalks and that this only applies to Sundays. I would need clarification on that. The last 2 weeks have been mess all over the neighborhood walking around the icy sidewalks and streets. The church located directly across the street from the parking lot at 1601 Fitzwater is allowing, permitting, parking on the actual sidewalk on Fitzwater street (as it does all throughout the week). This is creating a huge pedestrian problem requiring people to walk in the street or try to squeeze by cars on the ice. I fell and have watched others with baby strollers not be able to get through because cars are parked on the sidewalk. This week especially, this is dangerous and illegal. However, this should not be permitted at any time of day or week, there are already designated church parking lanes on Sundays. PPA was out last night and did not ticket or enforce. Please fix this issue.
Yesterday (2/9/14), all day, again there were multiple cars parked on the sidewalk(s) blocking pedestrians on Fitzwater street west of 16th. There was a PPA vehicle on 16th street that did not appear to right tickets or have cars towed. In this situation, who can be contacted immediately to have cars towed? This needs to stop.
Over a week ago now a drunk driver crashed and wrecked 6 cars at this intersection. They should immediately have had to pay for the clean up of the entire block, which the remnants have blown all over the place. I have tried to pick up as much as I can but it isn't my job to clean up after a complete idiot who drunkenly ran his car head long into a car just after a stop sign.
The police have all of his information in the case file.
But the difference here is we know the person who put the dog $%^& there.
The house is abandonded and beginning to show signs of collapsed roof. The building is also full of garbage which is creating a fire hazzard. Nothing has been maintained.
Ticket #929088. Ticket forwarded to L & I for follow-up.
Nothing has visibly been done to address this issue. At present the front door of the building remains WIDE OPEN allowing for animals to enter. PLEASE physically do SOMETHING!
Please help. We are getting a puppy and planning on having a baby soon. I am very nervous about the state of this home, not only damaging our home, but for the safety of people around it. Please help before something bad happens.
This lot has been in varying levels of disrepair.
Since it does have a Metro Impact "coming soon" sign on the fence I reached out to them. Steve has been nice enough to clean up the trash a couple times and he put up the fence at his own expense. According to Steve this lot is still city owned so, again according to him, there is not much he can do.
Here is a picture taken before Steve cleaned up last a few weeks ago.
Another section of fence has either fallen down or been broken down and a whole new load of garbage and other debris has been dumped in to this lot.
This is an obvious public safety and public health issue and I am appalled it has not been addressed in some way.
What's the deal with the Street's department posting no parking signs on 19th street between Bainbridge and Fitzwater for the last 2 weeks and on one moving their cars and nothing being done???
The Stop Sign on the NW Corner of 19th and Catherine--for traffic going south on 19th Street, is knocked down.
The sign just got knocked back down.
The sign is back up. Some numbskull re-opened it.


text:
Tip Us or Submit a Story
Sinlung / Northeast
NESO Meets PM On Northeast 'Specific' Issues
Dimapur, May 11 : A delegation of the Northeast Students Organization (NESO), which has been camping in New Delhi since May 6 to apprise the central leaders on the burning issues confronting the people of the region, has met the Prime Minister, Dr Manmohan Singh on May 8 and submitted a memorandum. According to a press note from the NESO, the delegation had an in-depth deliberation on the various issues affecting the region.
The NESO delegation also called on the Leader of Opposition, Lok Sabha, Sushma Swaraj; BJP President, Rajnath Singh; Congress Vice President, Rahul Gandhi; Election Commissioner of India, HS Brahma and the office bearers of the North East MPs Forum.
According to the press note from the NESO, the issues discussed included education policy and human resource development; repeal of impunitive legislations and the need to expedite the ongoing peace process for an early negotiated settlement; infiltration of illegal migrants, refugees and demand for a comprehensive policy thereof.
Other issues raised were economic and infrastructural development; employment policy for NE; Indo-Bangla land swap deal 2011 and stapled Visa; special constitutional status and separate time zone for NE region and restructuring of the Ministry of DoNER. The NESO has informed through its Chairman Samuel B Jyrwa and Secretary General Sinam Prakash on the outcome of the deliberation with the central leaders.
On the education policy and HRD, NESO urged the PM to set up a Special Educational Commission in order to assess the state of education in the NE and to evolve a suitable and appropriate educational policy which is relevant to the people. The NESO pointed out that thousands of students have no option and are compelled to seek better education in mainland India. The PM gave a patient hearing and assured to look into the matter.
The NESO has urged the PM to repeal the AFSPA, 1958 and other "inhuman laws," and to expedite the ongoing peace process for an early negotiated settlement.
NESO asked the PM that if the government can send a parliamentary team to Jammu & Kashmir, why not a similar initiative can be taken for the NE region. The PM responded in the affirmative, the NESO stated. On the ongoing peace process, the PM asserted that for the last nine years, he had taken personal initiative to bring about a negotiated settlement at the earliest in order to restore peace in the region.
NESO also pointed out to the problem of influx of illegal migrants/foreigners and refugees besides enrolment of illegal foreigners in the electoral roll. The PM was urged to take steps towards deleting such illegal entries and deporting them. NESO also pointed out that the National Register of Citizens, 1951 should be updated. Moreover, NESO urged the PM for effective implementation of Assam and Manipur accord.
The PM was also urged to evolve a sustainable economic policy for the NE region and to stop construction of mega dams in the region keeping in view the seismic sensitivity and to declare floods and problems of erosion in the NE region as national problems. The PM agreed to the viewpoint of the NESO on this matter.
On employment policy for the NE, the NESO delegation stressed on the need to have an employment policy for the indigenous peoples of NE whereby a 100% reservation in Grade III & IV is needed to be reserved in all the Central government offices located in the region.
On Indo-Bangla land swap deal 2011, NESO while expressing concern for the indigenous communities, asserted that this should be scraped in order to protect the land of the people.
On special constitutional status, NESO urged the PM to grant a Special Constitutional Status for the people of the NE region in order to delegate greater federal authority to the State governments including the rights over land and its natural resources.
According to the NESO, the PM explained that the NE region has a special status and that special packages meant solely for the region exists. However he assured more for advance development of the region. The NESO also demanded to the PM not to dissolve the DoNER Ministry and instead urged for its restructuring.
The PM assured that DoNER will not be dissolved and that the Ministry will be strengthened so as to boost economic development in the region.
Source: Morung Express
Kat Dennings Nude Pics Leaked Online (NSFW)
Kat Dennings is the latest celeb to find herself amidst a nude photo scandal. The photos showing the actress suggestively stripping for the ...
Mizoram and Hmar People's Convention to hold peace talks
Lalthalien said Hmar would lead the delegation this time, while 'Deputy Army Chief' of the outfit Lalbiaknunga, earlier tipped to ...
94 serows die of goat pox in Mizoram
At least 94 serows, the state animal of Mizoram, have been found dead across the state since the outbreak of goat pox disease last year, Env...
Mizoram Farming Model Attracts Global Funding
Aizawl, Sep 4 : The Mizoram government's farming scheme that aims to support over 1,25,000 families in the state has attracted intern...
14-yr-old girl gives life to save others in Mizoram
Aizawl, Mar 7 : In an act of heroism, a 14-year-old girl in Darlawn in the district sacrificed her own life to save others recently. Report ...
Archives January (10) November (9) October (16) March (14) December (1) March (5) November (3) October (8) September (28) August (64) July (35) June (46) May (48) April (45) March (72) February (54) January (54) November (35) October (43) September (80) August (98) July (77) June (145) May (69) April (31) March (66) February (58) January (4) December (63) November (104) October (80) September (130) August (122) July (88) June (117) May (84) April (67) March (39) February (53) January (54) December (47) November (109) October (67) September (69) August (127) July (73) June (84) May (78) April (87) March (66) February (78) January (50) December (83) November (165) October (163) September (159) August (148) July (175) June (164) May (237) April (417) March (415) February (286) January (185) December (189) November (271) October (309) September (256) August (212) July (223) June (306) May (251) April (243) March (245) February (356) January (308)
Sinlung PLUS
Copyrights Reserved ~ 2014 Sinlung


Enjoy the superb point and spring of red sable at a fraction of the cost with Robert Simmons White Sable brushes. Ideal for watercolor and acrylic paints, these short handled brushes are guaranteed for life.
Robert Simmons pioneered a revolution in synthetic brushes, creating a unique blend of filaments that perform so remarkably like pure red sable that they earned the name "White Sable." Just as when Robert Simmons introduced them in 1972, these brushes are guaranteed for life.
I have used these brushes for many years. I recommend them to my students and buy extras for them when I am ordering. They work so well for my techniques!!


text:
Biografia
Sebbene sia stato uno dei massimi pittori svizzeri d'ogni tempo, le notizie su Konrad Witz, che si presume padre di Hans, scarseggiano. Lo si sa d'origine sveva ma cittadino di Basilea dal 1435 e autore delle ante del Petrusaltar per l'altar maggiore della cattedrale di Ginevra, firmate Conradus de Sapientis e datate 1444. Si sa anche che alla sua morte, avvenuta tra l'inverno del 1445 e la primavera del 1446, lasciò cinque figli, che l'anno successivo furono affidati alla tutela di Hans Witz, loro nonno paterno e pittore anch'egli.

È lecito ipotizzare che a uno dei cinque figli fosse stato imposto lo stesso nome del nonno e che Hans Witz il giovane abbia appreso il mestiere dal padre. Di fatto, gli studiosi attuali sono orientati a parlare di una cerchia dei Witz, tanto è arduo districarsi nel labirinto delle attribuzioni. Per la Crocefissione di New York, nella Frick Collection, databile attorno al 1440, un tempo ascritta a Konrad Witz, si è ora propensi per un'attribuzione ad Hans, come per quella alla Gemaeldegalerie di Berlino e per la Sacra famiglia all'interno di una chiesa conservata al Museo di Capodimonte, a Napoli.

Secondo l'uso del tempo, Hans Witz latinizzò il proprio nome, ma, pare, adottando più di una versione: Johannes Sapiens, o de Sapientis, o de Sapientibus, o de Savii, come risulta citato in una lettera databile attorno al 1477 che Branda Castiglioni, vescovo di Como, indirizzò a Bona di Savoia, nipote di Amedeo VIII,  parlando di un "magistro Zohanni de Savii depintore de Savoya" attivo nel ducato milanese e che lo stesso vescovo aveva ospitato in casa propria dal marzo 1476 per quasi un anno. Sulla base di tale lettera, ad Hans Witz viene attribuito l'affresco di Cristo davanti a Pilato nell'oratorio di San Bernardo, all'ingresso dell'abbazia di Chiaravalle milanese, della quale era commendatario in quegli anni un fratello minore del duca Galeazzo Maria, il futuro cardinale Ascanio Maria Sforza.

La corte sabauda di Amedeo VIII vide una grande fioritura delle arti, e in tutto il territorio piemontese nel secondo Quattrocento s'impose il gusto fiammingo: Hans e Konrad Witz furono tra i protagonisti dell'affermazione di tale Ars nova.

Bona di Savoia sposò nel 1468 il duca di Milano Galeazzo Maria Sforza e divenne madre di Gian Galeazzo Maria, in nome del quale fu duchessa reggente dopo che il coniuge fu assassinato, il giorno di Santo Stefano dell'anno 1476. Hans Witz risulta aver operato come pittore di corte a Milano dal luglio 1478 (la carica si era resa vacante nel 1476, alla morte di Zanetto Bugatto; nel 1480 la reggente fu estromessa dal potere ad opera del cognato Ludovico, detto il Moro).

Di Hans Witz s'ipotizza la possibile paternità anche della vetrata di Sant'Agostino nella Certosa di Pavia.

Permane una grande incertezza, alimentata dalla penuria di notizie e documenti, dalle omonimie e dalla confusione derivante dall'uso di pseudonimi e soprannomi. Risulta tuttavia accertata l'attività di Hans Witz tra il 1440 e il 1491 tra Chambéry, Ginevra e Milano.

Note

Bibliografia
 Evelyn Samuels Welch, "Un artista di Ginevra nella casa di Branda Castiglioni, vescovo di Como", in Arte Lombarda, 70-71, Milano, 1984
 Archivio di Stato di Milano, Fondo Sforzesco, Autografi n. 8 e 102
 Le Duché de Milan et les commanditaires français (1499-1521), a cura di Frédéric Elsig e Mauro Natale, Roma, 2013
 Konrad Witz, voce del Dictionnaire de la peinture, Parigi, Larousse
 Konrad Witz, mostra al Kunstmuseum di Basilea, marzo-luglio 2011 (catalogo e recensioni)
 "Corti e città. Arte del Quattrocento nelle Alpi Occidentali", mostra a Torino, Promotrice delle Belle Arti, fino a maggio 2006 (catalogo e recensioni)
 "Présences septentrionales en Lombardie au temps des Sforza (1450-1535)", Convegno all'Università di Ginevra, 12-13 aprile 2013.

Collegamenti esterni


text:
<link href="<?php echo base_url()?>/static/css/jquery-ui.min.css" rel="stylesheet" type="text/css">

                               CREAR MEDICO

                                <form id="frmMed">

                                    <fieldset class="scheduler-border">
                                      <legend class="scheduler-border">   Nuevo Medico</legend>

                                        Cedula:
                                        <input type="text" required="true" onkeypress="return event.charCode >= 48 && event.charCode <= 57" pattern="[0-9]*" class="form-control" id="med_ced" name="med_ced" placeholder="Ingrese C.I" maxlength="10"/>

                                        Nombre:
                                        <input type="text" required="true" title="Ingrese solo letras" pattern="[aA-zZ;' ']*" class="form-control" id="med_nom" name="med_nom" placeholder="Ingrese Nombre"/>

                                        Apellido:
                                        <input type="text" required="true" title="Ingrese solo letras" pattern="[aA-zZ;' ']*" class="form-control" id="med_ape" name="med_ape" placeholder="Ingrese Apellido"/>

                                        Dirección:
                                        <input type="text" required="true" class="form-control" id="med_dir" name="med_dir" placeholder="Ingrese Dirección"/>

                                        Telefono:
                                        <input type="text" required="true" class="form-control" onkeypress="return event.charCode >= 48 && event.charCode <= 57" pattern="[0-9]*" id="med_tel" name="med_tel" placeholder="Ingrese Telefono" maxlength="10" />

                                        Email:
                                        <input type="email" required="true"  class="form-control" id="med_eml" name="med_eml" placeholder="Ingrese Email"/>

                                    </fieldset>

                                        <button type="submit" class="btn btn-primary btn-large">   Guardar</button>

                                </form>

                           LISTAR MEDICO

                                             Cedula
                                             Nombre
                                             Apellido
                                             Telefono
                                             Email
                                            Acción

                            ASIGNAR ESPECIALIDAD

                                <fieldset class="scheduler-border">
                                    <legend class="scheduler-border">Datos del Medico</legend>

                                    C.I.

                                      <input type="text" required="true" class="form-control" id="amed_ced" name="amed_ced" placeholder="Ingrese C.I." maxlength="13" required />

                                    Medico:

                                      <input type="text" required="true" class="form-control" id="amed_nom" name="amed_nom" placeholder="Apellido Nombre"/>

                                    E-mail:
                                    <input type="email" required="true" class="form-control" id="amed_eml" name="amed_eml" placeholder="Ingrese Email"/>

                                    Dirección:
                                    <input type="text" required="true" class="form-control" id="amed_dir" name="amed_dir" placeholder="Ingrese Dirección"/>

                                    Teléfono:
                                    <input type="text" required="true" onkeypress="return event.charCode >= 48 && event.charCode <= 57" pattern="[0-9]*" class="form-control" id="amed_tel" name="amed_tel" placeholder="Ingrese Telefono"/>

                                </fieldset>

                                        <img src="<?=base_url()?>static/images/espera.gif" width="50" height="50" />

                                <legend class="scheduler-border"></legend>
                                <legend class="scheduler-border">Asignación de Especialidad</legend>

                                                              Descripcion
                                                              Asignar

                                            <button type="button" class="btn btn-primary btn-large col-md-offset-9" id="btnGuardarAsignacion" style="border-radius: 8px 8px 8px 8px;">

                                              GUARDAR ASIGNACION
                                            </button>

                           LISTAR ASIGNACION

                                             Cedula
                                             Medico
                                             Acción

                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>

                            <input type="hidden" id="txtId">

                            Nombre:
                            <input type="text" class="form-control" placeholder="Nombre" name="mmed_nom" id="mmed_nom">

                            Apellido:
                            <input type="text" class="form-control" placeholder="Apellido" name="mmed_ape" id="mmed_ape">

                            Direccion:
                            <input type="text" class="form-control" placeholder="Direccion" name="mmed_dir" id="mmed_dir">

                            Telefono:
                            <input type="text" class="form-control" placeholder="Email" name="mmed_tel" id="mmed_tel">

                            Email:
                            <input type="emal" class="form-control" placeholder="Email" name="mmed_eml" id="mmed_eml">

                            <button type="button" class="btn btn-default" data-dismiss="modal">   Cancelar</button>
                               Guardar

                      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>

Especialidades

                                        Especialidad
                                        Seleccionar

                        <button type="button" class="btn btn-default" data-dismiss="modal" id="btnCancelar">Cancelar</button>
                        <button type="button" class="btn btn-primary" id="abtnGuardar">Guardar</button>

redpajama_set_name: RedPajamaGithub


text:
New App Aims to Connect Virtual Workforces
A new employee engagement app specifically targets organizations seeking to build a closer connection to virtual workers and contractors.
Staff Connect is an employee engagement application designed to create a hub for organizations anywhere in the world seeking to better connect deskless workers to the overall community. While the app can be set up in hours, the company believes it should be treated as a change management process.
Many technology ideas come from the personal experience of the founder. For Bulent Osman, CEO and founder of Surrey, U.K.-based Staff Connect, the "aha" came when he was working at Microsoft, where he recognized just how "disconnected and disengaged" many of the company's virtual workers felt. "You would hear this in exit interviews not in just in my division but in peer-to-peer reviews across the organization. I thought, this is Microsoft, we should have all the tools to make these connections, so I began to research how other organizations tackle the issue of the non-desk worker. I found that while most such employees work on their desktops, there's no formal technology to connect them to the organization. With the prevalence of deskless workers and mobile devices, I saw a real opportunity, created a mobile app, and found a visionary U.S. company willing to test it."
Now four years later, the company has several dozen clients in the U.K., Europe, Australia, and in the U.S. and is now expanding in the U.S. with the opening of a sales office on the East Coast for which the company is seeking a sales professional. The company targets organizations with 10,000 to 50,000 employees and recently signed up a major automaker, Osman reports.
The technology includes four key modules:
1) Communities "to encourage user-generated connect by enabling employees to share updates, images, and videos with communities, with the option to comment and 'like' posts."
2) News—a platform to broadcast company information and announcements to all employees.
3) Chat—instant-messaging features enabling employees "to share updates with individual colleagues and groups no matter where they are."
4) Surveys—the ability for organizations to take a "temperature check or find out what your employees think about recent announcements."
The goal of the technology, Osman explains, "is to empower the deskless workforce, the forgotten workforce…We are targeting forward-looking companies. We are doing a lot in health care and related companies in the U.S. as there are so many doctors, nurses, cleaners, caterers and people who are not sitting at their computers every day; many may not be given a laptop by their companies, and many not even have a company email address. The same is the case in many other industries beyond I.T. and health care, including construction, mining, transportation, manufacturing, warehouses, or any business with lots of tele-commuters. So many of these folks are truly forgotten. The goal is to get them connected, engaged, and to give them a voice. The more one looks at the size of market of disconnected workers, the more use cases one finds for our technology."
Osman understands that today's organizations use multiple technologies to engage with and connect employees, so Staff Connect is built to easily connect with other applications, he says. For instance, Staff Connect does not include any rewards and recognition tools at this point, but, Osman adds, an organization could readily connect a rewards platform to Staff Connect through an API.
The key to selling the technology, Osman admits, is to help the CEO understand the pain points related to connecting virtual workers and the consequences of failing to address them. "While it takes only a few hours to set up our technology, it can take up to four weeks or more to deploy because this should be considered part of a change management strategy, not just the deployment of a new app. We believe it's very important to work in partnership with our clients to develop a return-on-investment for the effort and that means making sure everyone in the organization is engaged with the vision and process."
In addition to focusing directly on corporate practitioners, the company seeks to reach the growing community of engagement agencies, advisors, and consultants working with organizations to help improve engagement.
Ciara O'Keefe
ciarao@staffconnectapp.com
Master the Principles of Enterprise Engagement to Achieve Organizational Goals and Enhance Your Career
Profit from a new strategic and systematic approach to engagement to enhance your organization's brand equity; increase sales, productivity, quality, innovation, and safety, and reduce risks.
Get trained to become a Chief Engagement Officer for your organization.
Achieve ISO 10018 Quality People Management Certification to demonstrate your organization's strategic commitment to people to your customers, employees, distribution partners, vendors, communities, investors, and regulators.
Learn how to create Sustainability or Integrated Reports for Your Organization or Clients.
Get up-to-speed on ISO human resources standards and guidelines to enhance HR performance.
Live Education: Enterprise Engagement in Action. Take advantage of scheduled monthly live webinar preparation courses for the Certified Engagement Practitioner designation consisting of three one-hour classes and of quarterly Advanced Engagement Practitioner courses consisting of three one-hour webinar classes. The AEP course is for individuals or teams seeking preparation ISO 10018 professional certification status. ICEE periodically runs regional one-day workshops on ISO 10018 Quality People Management principles and certification.
Resources: The Brand Media Coalition, the only guide to the story-telling power of brands and where to source them for business, event, promotional gifting, and rewards and recognition. 2019 Enterprise Engagement Solution Provider Directory. The only directory of engagement solution providers covering all types of agencies and tactics as well as insights on how to select them.
Communities: The Enterprise Engagement Alliance and Advocate and the Brand Media Coalition free resource centers offering access to the latest research, news, and case studies; discounts, promotions, referrals, and commissions, when appropriate to third-party solution providers from participating coalition solution provider members.
Enterprise Engagement for CEOs: The Little Blue Book for People-Centric Capitalists
Written specifically to provide CEOs and their leadership teams a concise overview of the framework, economics, and implementation process of a CEO-led strategic and systematic approach to achieving success through people. (123 pages, $15.99)
Enterprise Engagement: The Roadmap 5th Edition
The first and most comprehensive book on Enterprise Engagement and the new ISO 9001 and ISO 10018 quality people management standards. Includes 36 chapters detailing how to better integrate and align engagement efforts across the enterprise. (312 pages, $36.)
• 10-minute short course: click here for a 10-minute introduction to Enterprise
• Engagement and ISO standards on Coggno.com.
• 5-minute Audiopedia summary of the Enterprise Engagement field.
• The International Center for Enterprise Engagement at TheICEE.org, offering: ISO 10018 certification for employers, solution providers, and Enterprise Engagement technology platforms; Human Resources and Human Capital audits for organizations seeking to benchmark their practices and related Advisory services for the hospitality field.
• The Engagement Agency at EngagementAgency.net, offering: complete support services for employers, solution providers, and technology firms seeking to profit from formal engagement practices for themselves or their clients, including Brand and Capability audits for solution providers to make sure their products and services are up to date.
• C-Suite Advisory Service—Education of boards, investors, and C-suite executives on the economics, framework, and implementation processes of Enterprise Engagement.
• Speakers Bureau—Select the right speaker on any aspect of engagement for your next event.
• Mergers and Acquisitions. The Engagement Agency's Mergers and Acquisition group is aware of multiple companies seeking to purchase firms in the engagement field. Contact Michael Mazer in confidence if your company is potentially for sale at 303-320-3777.
Enterprise Engagement Benchmark Tools: The Enterprise Engagement Alliance offers three tools to help organizations profit from Engagement. Click here to access the tools.
• ROI of Engagement Calculator. Use this tool to determine the potential return-on-investment of an engagement strategy.
• EE Benchmark Indicator. Confidentially benchmark your organization's Enterprise Engagement practices against organizations and best practices.
• Compare Your Company's Level of Engagement. Quickly compare your organization's level of engagement to those of others based on the same criteria as the EEA's Engaged Company Stock Index.
• Gauge Your Personal Level of Engagement. This survey, donated by Horsepower, enables individuals to gauge their own personal levels of engagement.
For more information, contact Bruce Bolger at Bolger@TheEEA.org, 914-591-7600, ext. 230.


text:
AKA: ブラック・ジャック, Blackjack, Black Jack: Carte, Black Jack: Clinical Chart
Genre: Medical drama
Length: OAV series, 9 episodes, 45-60 minutes each
Distributor: Currently available streaming on Viki.
Content Rating: R (language, mature themes, brief nudity, violence, explicit surgical procedures)
Related Series: all other Black Jack works; Ray: The Animation
Also Recommended: Black Jack: The Four Miracles of Life, Black Jack TV, Black Jack 21, Black Jack: The Movie, Metropolis, Pet Shop of Horrors, AD Police
Notes: Based on the series by "father of Japanese animation," Tezuka Osamu, this series was directed by Dezaki Osamu, one of Tezuka Osamu's proteges.
Black Jack OAV
In the medical profession, there is a name spoken in hushed tones, of an unlicensed genius physician who can save lives - for a price. His name is Black Jack, and he is a dashing, moody figure, caped in black, a Harlock of medicine, a man who lives by no rules other than his own - and the Hippocratic oath. A man who would defy the will of God himself in the name of preserving life.
This OAV series features nine standalone stories of his cases, and are a dramatic portrayal of what it means to be a healer in the human world.
This isn't the Black Jack of our parents and grandparents. Produced in the 1990s, the trend was dark, sexy, gritty, bloody, violent ... a far cry from the average Black Jack TV fare.
Now I can handle a darker Black Jack. The artwork has certainly been updated for the times, and the animation, though showing age, was still lovely ... even if it was struggling to show traces of Tezuka.
I will go ahead and state for the record that I did not enjoy the OVA nearly as much as I have the TV series. That isn't to say that the OVA is bad. The story of Black Jack compliments the OVA format--uncontinuous series of one-shot medical cases. So it isn't like some sort of plotline is being compromised for the sake of a short format. (If you want to see that being done to Black Jack, let's talk about the 2000 TBS drama starring Motoki Masahiro. Painful.)
What the OVA does compromise is the integrity and characterization of the lead. Rather than the vengeful and cunning doctor, whose life was literally ripped apart as a little boy, we get a waxing poetic, brooding shadow. A ladies' man, a cold heartbreaker ... and every woman leaps at the opportunity to land our skillful surgeon into the sack.
Is it because I am a woman that I found it so revolting? Admittedly, the doctor is, in my book, all kinds of sexy. But I realize that, like the disfigured Zelgadis Graywords in Slayers, he isn't supposed to be. Is it because my favorite Pinoco is totally getting the shaft? Perhaps that has something to do with it. But I am one to prefer quality over quantity: the Pinoco in the OVA is extremely enjoyable and plays up the maturity which is present in the manga, and conveniently absent in the softened TV series.
So what is with the director making the decision to morph Kuro into Don Juan de Black Jack? He doesn't actually flat out reject the girls like the normal doc would. Instead he plays hard to get and leads them on--resulting in one "client" approaching him in the shower, another aksing him to spend the night with her, another crawling into his bed stark naked.
Frankly I grew quite annoyed with the brazen women and gratuitous nudity. This is something better suited for A.D. Police. The nudity doesn't do anything to further the plot. It only succeeded in infuriating me, and cheering on the death of the "heroines." What a laugh. How dare those hussies make a move on the doc! This isn't James Bond, you know!
Fortunately, the sex factor died down a bit after episode three, but I refuse to believe that the production team wasn't actively looking for an excuse--any excuse!--to show the boobies of every pretty lady to grace the screen. An episode hasn't passed without at least a full minute of boobie airtime.
Maybe it is the mood I have been in, but normally I can overlook minor things such as nudity--but when it is so blatantly sexual in a series that was never, at least in any other incarnation, even an afterthought, I can't help but find myself struggling through the episodes, trying to enjoy it through ignoring the scenes. But it was too much for me. Black Jack is a fantastic series, and the stories in this series are great. But I feel that the OVA series has the same disturbing problems that A.D. Police did. It was just too much.
Black Jack is still Black Jack, and this is still one of the better series out. But the minor offense of the outright sexuality in a series I think is better off without was enough for me to nix out a star. — Melissa Sternenberg
Recommended Audience: Fifteen and over. The squeamish need not apply, as there are very graphically depicted surgeries, though nothing worse than on the Learning Channel or ER. Very brief, non-explicit nudity, though no sex and only one sexual situation in the series. There is also a hefty bit of violence in several of the episodes that can be pretty graphic, but not gratuitous in any way. This is purposeful, mature animation that is intended for a mature audience, but it is far from offensive. Mature teens could probably handle this one, though parental guidance is strongly suggested.
Version(s) Viewed: R2 DVD
Black Jack OAV © 1993 - 1998 Tezuka Pro / Nippon Columbia


text:
Juno makes a death-defying swoop for its first and closest flyby of Jupiter
By Jessica Hall on September 1, 2016 at 12:24 pm
Juno spat in the face of certain death this week as it made its first and closest pass to the clouds on Jupiter. We don't really think of spacecraft as being "disposable" per se, but we did sort of send a one-time-use spacecraft to Jupiter; even though it was specifically built so that it could handle Jupiter's radiation belts, Juno won't survive its mission there. You might even say that Juno will die for our wins.
It's all because of the extreme electromagnetic environment around Jupiter. Liquid metallic hydrogen circulating in Jupiter's interior contributes to the strength of the magnetic fields forming a deadly donut around Jupiter's equator (we think; Juno is designed in part to confirm or correct this hypothesis). During the time it spends in orbit — about a year and a half — the spacecraft will swoop in for a close flyby above the planet's cloud tops every 14 days. But that means every two weeks it has to make a deep sortie into — and back out of — the Jovian magnetosphere.
Jupiter's radiation belts extend out some 400,000 miles from the surface. Juno will skim within 3100 miles of the clouds, and this first close pass got within 2400 miles. While the stalwart spacecraft will make the shallowest possible passes through Jupiter's magnetic field, damage from the repeated plunges will eventually fry it. All by itself, the magnetic flux is enough to induce electrical current sufficient to short out our best electronics and baffle Juno's magnetometer. Then there's the ionizing radiation. Jupiter is a terribly hostile place, and Juno is already committed. It completed its first orbit just this week.
It's not like we didn't realize the dangers of orbiting Jupiter. Juno was purpose-built for the ludicrous EM environment around Jupiter — it's what happens when your tank (finally!) gears up like a tank.* It's got a 10mm titanium "radiation vault" designed to mitigate damage from the particles accelerated by Jupiter's insane magnetic fields. The spacecraft is swathed in those shiny thermal blankets, which in this case also act as a Faraday cage, allowing electricity to be diverted around Juno instead of building up a dangerous charge. It's got a duplicate of everything important, because the project team assumed that at some point, components would inevitably short out and die. All its cords and cables are clad in braided metallic shields. And its polar orbit was planned to keep it in the most clement parts of the magnetosphere.
Juno's polar orbit starts out skimming shallowly through the magnetosphere, but makes deeper and deeper dives. Image: NASA/Caltech/JPL
Every time it makes a new orbit around Jupiter from here on out, Juno will make a deeper and more perpendicular pass through the radiation belts, exposing its sensitive memory and control equipment to greater and greater doses of radiation. NASA hopes to get 36 orbits out of Juno before the radiation environment finally makes a TKO. Juno's radiometer might only make it through 11 orbits, but JunoCam could kick it in eight or less. Either way, Juno will soldier on until it's reached the end of its mission, and then de-orbit, which is to say, it will burn up in Jupiter's atmosphere rather than risk contaminating Europa with Earthly microbes. But until then, Juno is "firing on all cylinders" and making data transfers back to Earth right on schedule.
"We are getting some intriguing early data returns as we speak," said Scott Bolton of the SwRI, principal investigator on the Juno team. "It will take days for all the science data collected during the flyby to be downlinked and even more to begin to comprehend what Juno and Jupiter are trying to tell us."
Images from JunoCam should be released over the next couple of weeks. Those images will include the highest-resolution views yet of the Jovian atmosphere and some beauty shots of Jupiter's north and south poles. Scientists hope to use Juno's camera and other instrumentation, including its magnetometer and the JEDI and JADE instruments, to learn more about what goes on around the poles, with an eye to the way the magnetic field interacts with Jupiter's atmosphere, and especially its auroras.
Beyond the auroras, though, what we're really after is a better sense of the internal structure of Jupiter. It was the first planet to form in our solar system, and whether or not it has a core will tell us how it formed, and could divulge important information about the formation of planets, our solar system and other star systems, and maybe even shed light on the conditions that led to the emergence of life on our own rocky little planet.
"We are in an orbit nobody has ever been in before," said Bolton, "and these images give us a whole new perspective on this gas-giant world."
*No offense is intended to tanks, especially those long-suffering paladins who build just fine but then can only facepalm as they watch their DPS charge blithely onto the point of an opponent's sword.


Repair and Restore Windows Registry Files, Repair DLL Error Messages and Fix General Protection Fault Errors. Scan your system for invalid file and system references that cause instability, PC errors, crashes, and general system slowdowns.
Repair and Restore Windows Registry Files, Repair DLL Error Messages and Fix General Protection Fault Errors. Scan your system for invalid file and system references that cause instability, PC errors, crashes, and general system slowdowns. - System not as fast as it used to be? - Does your PC keep crashing? - System not as stable as you would like? - Receiving error messages and don't know why? Did you know that most of these issues are easily repairable? Don't pay a technician loads of money for an issue that you can easily repair yourself! Download FREE and Scan your system registry and hard drive for invalid file and system references. These invalid references cause system instability, PC errors, constant crashes, and general system slowdowns. The software will inform you of where the errors exist, and what potential errors they might cause. IDENTIFY ERRORS RELATED TO: - Missing file associations - Missing startup programs - Invalid device drivers - Invalid application paths - Missing DLL files - Missing help files - Missing system fonts - And much more! ADDITIONAL PRODUCT FEATURES INCLUDE: - Browser Helper Object Manager - Startup Program Manager - Add/Remove Program Manager - Full Registry Backup Utility Download Top Rated Registry Fix & Cleaner software Free. Restore and Clean Up Windows Registry Files, Repair DLL Error Messages and Fix General Protection Fault Errors. Does your PC crash? Is your system running slow or are you receiving regular error messages? Scan your system registry and hard drive for invalid dll file and system references for FREE. Restore and Clean your Windows Registry, Fix Errors, Speed Up your PC and Stop Crashes!


text:
Maximilian "Max" Schrems (Salzburg, oktober 1987) is een Oostenrijks advocaat, auteur en privacyactivist. Hij kwam vooral in het nieuws met zijn klacht bij het Europees Hof van Justitie, waarna het hof in oktober 2015 een einde maakte aan de Safe Harbor Privacy Principles, de overeenkomst voor de uitwisseling van persoonsgegevens tussen Europa en de Verenigde Staten. De uitspraak werd gezien als een sterk signaal voor de bescherming van de digitale grondrechten in Europa. Na een nieuwe klacht van hem, ditmaal tegen Facebook, vernietigde het Hof van Justitie in juli 2020 het EU-VS-privacyschild, de opvolger van de vernietigde Safe Harbor. Hij is ook CEO van het NOYB-initiatief, een Europese NGO die zich inzet voor het afdwingen van wetten op gegevensbescherming.

Max Schrems won reeds verschillende prijzen en erkenningen:
2011: positiefprijs Defensor Libertatis van de Oostenrijkse Big Brother Awards.
2015: de Positieve privacyprijs Felipe Rodriquez Award in Nederland.
2015: Theodor-Heuss-medaille voor burgerzin, in Duitsland.

Elektronische persoonsgegevens
Privacy
Oostenrijks activist


Four prominent members of the Debian community have stepped down or reduced their involvement in the project as a result of an increasingly bitter argument over the future of the widely influential Linux distribution.
The battles center on the recent decision by Debian's governing technical committee to replace the venerable sysvinit startup module with systemd in the forthcoming release, dubbed "Jessie." Systemd is a more sophisticated, complex piece of software, which supporters say is a necessary update to a badly outmoded part of Debian, while critics accuse it of being needlessly complex and suffering from serious feature creep.
Anti-systemd developers have proposed a general resolution sort of a ballot initiative presented to the Debian community. If the vote succeeds by a more than 2:1 margin the Debian constitution requires a supermajority to override a technical committee decision Debian software will need to become init-system-agnostic. In essence, the resolution is an attempt to prevent Debian from becoming tied too closely to systemd.
The criticism has hit a fever pitch in recent months, with systemd creator Lennart Poettering taking to Google Plus to talk about receiving death threats and other online abuse.
The latest departure is Tollef Fog Heen, a Debian systemd maintainer, who said he felt overwhelmed by "continued attacks" in a mailing list message posted Sunday announcing his decision. Contacted via email by Network World, Fog Heen said that part of the reason that tempers have gotten so out of control is that Debian's complex decision-making procedures aren't satisfactory to many it's been a problem before.
"You saw a much milder version of this when udev was introduced a long time ago: A vocal, conservative group opposed it very strongly, but over time various components essentially made udev mandatory," he explained. "I think systemd will follow much of the same pattern."
Fog Heen said that he plans to concentrate on other projects he's involved in for the moment, but didn't rule out taking on something new in the future. He follows in the footsteps of several other recent high-profile departures, which have included three members of Debian's technical committee effectively, the distribution's governing body. Joey Hess and Colin Watson stepped down on Nov. 8, though Watson remains in place on an interim basis, and Russ Allbery resigned Sunday evening.
In his announcement, Allbery cited the same stress over community decision-making as Fog Heen as a reason to step down.
"Nearly every [technical committee] decision is now very fraught, and expressing those decisions, at least in the current framework, requires more skill, care, attention, and caution than I currently have mental or emotional resources to do," he wrote.
Hess said much the same thing in a blog post, though he went out of his way to emphasize that systemd was not the reason for his resignation.
"Debian used to be a lot better at that than it is now," he said. "This seems to have less to do with the size of the project, and more to do with the project having aged, ossified, and become comfortable with increasing layers of complexity around how it makes decisions."
Both Hess and Wilson insisted that the systemd issue alone didn't drive them out of Debian, although Wilson admitted that it didn't help.
"I'm sure the general stress resulting from it was a contributing factor somewhere, in that without it I wouldn't have felt that my [technical committee] duties were something I needed to drop," he told Network World.


text:
Eric Gagne apologizes to his friends, family, gives no comment upon allegations
A relief pitcher for the Milwaukee Brewers, Éric Serge Gagné, finally commented the Mitchell Report, accusing him of using baseball's steroids.
Eric apologized to his family, friends and new Milwaukee Brewer teammates but neither admitted nor denied the allegations. His speech was not long and he didn't allow any questions.
Signing with the Los Angeles Dodgers as a free agent in 1995, Gagné began his career as a starting pitcher. After he struggled in that role, the Dodgers converted Gagné from a starter to a reliever, where for three years (2002–2004) he was statistically the most outstanding closer in the game, winning the Cy Young Award in 2003. During that period, he set a major league record of 84 straight converted save chances.
Following this success, Gagné played sparingly in 2005 and 2006 due to injury, undergoing Tommy John surgery in 2005 and suffering a serious back injury in 2006. Gagné signed with the Texas Rangers for the 2007 season and enjoyed success again as a closer. After being traded to the Boston Red Sox on July 31, 2007, Gagné ultimately became a member of the 2007 World Champion Red Sox team.
On December 9, 2007, Gagné reached a preliminary agreement with the Milwaukee Brewers. On December 10th, he inked the one year deal to become their new closer. The deal has a base salary of $10 million, with incentives worth up to an extra $1 million.
On December 13, 2007, Gagné was listed in the Mitchell Report — former Senator George Mitchell's report on steroid use in baseball. Gagné was identified as a user of HGH (Human Growth Hormone). Allegedly, Gagné received the drugs from steroids dealer Kirk Radomski. At first Radomski said that Gagné obtained them from Dodgers teammate Paul Lo Duca, but Radmonski said in the report that he mailed two shipments of HGH directly to Gagné in 2004. Receipts of FedEx and USPS shipments indicate that Radomski received at least one payment from Gagné and two from Dodgers teammate Lo Duca on behalf of Gagné. Gagné declined to meet with Senator Mitchell to respond to the charges before the report was released.
Photo: www.chrisoleary.com