How to deduce the side affected by mate evaluatiion - chess

I have a GUI communicating with a uci chess engine (Stockfish 8). The problem is that when the engine finds a mate, it only sends output containing ". . . score mate 1 nodes 4677 . . .". I can deduce this means there is mate in one move (#1). But, unlike cp evaluation, I don't see negative sign when it is Black that can mate. So, how do I know if it is White or Black that can mate?

No. You'll get a negative sign when the player to move gets checkmated. Try it yourself:
position fen 7k/6q1/6q1/8/8/8/8/7K w - -
go infinite
You'll get:
info depth 127 seldepth 3 multipv 1 score mate -1 nodes 273 nps 39000 tbhits 0 time 7 pv h1h2 g7h6
Do you see the "mate -1"? The sign is relative to the player to move in the root position.

Related

Minecraft execute if scoreboard value = 0 with command blocks

I want to make a command block that executes "say Zero pigs alive" when the amount of pigs on the map is zero. I made a pig count with a scoreboard on the side that shows the amount of pigs when I press on the button, but I want a command to be executed when the amount is zero on the scoreboard. Does anyone know how I can do this?
This is what is looks like, when the 16 is a zero, so no pigs are in the map, it needs to activate the next command block that says "Zero pigs alive"
Yes , this is possible. You would want to do something along the lines of
execute if score test pig matches 0 run say Zero pigs alive
But, you can check if there are no entities alive and say your message all in one command, which would be more efficient. An example would be
execute unless entity #e[type=pig] run say Zero pigs alive```

How to /fill with Armor Stands In 1.12.2

I am trying to make a lag machine schematic in 1.12.2, and instead of placing 10000 Armor Stands by hand, I was wondering if there was any way to /fill them or use something with World Edit to do the same thing. I looked all over google but could not find anything that worked. I found a video (https://www.youtube.com/watch?v=LySru5q3j1U) however it did not work for me nor did it have any error messages, any help is appreciated.
/fill 351 8 223 192 8 64 torch(regular command block)
/execute #e[type=item.item.torch] ~ ~ ~ summon ArmorStand(chain command block)
Try setting your chain command block to Always Active.
Chain command blocks don't run if they aren't active.

ffmpeg - How to change the filter-paramaters depending on time oder framenumber?

Hallo to all userse and helpers here in this forum! Thank you, i am new and i have found allready a lot of solutions.
Now I want to ask, if someone can help me:
I have a Movie about 30 seconds made of 1 image.
Now I want to pixelate depending on time or framenumber - every time a litlle bit less.
My code so far:
ffmpeg -i in.mp4 -vf scale=iw/n:ih/n,scale=niw:nih:flags=neighbor out.mp4
where n should be the framenumber 1 to 900.
this scould also be t+1 for slower change.
the stars are gone - so i mean n times iw:n times ih:
error-massage:
undefined constant or missing '(' in 'n'
error when evaluating the expression 'ih/n'
maybe the expression for out_w:'w/n' or for out_h:'ih/n' is self-referencing.
failed to configure output pad on paresed_scale_0
error reinitializing filters!
failed to inject frame into filter network: invalid argument
error while processing the decoded data for stream #0:0
Do you have some suggestion plaese - Thank you in Advance

Getting unexpected output from BBC MicroBit robot when moving forwards and then reverse

I’m using a Micro:Bit and Bit:Bot to do some simple things but am getting unexpected results from the Bit:Bot motor.
Simply put, i’m trying to:
move the Bit:Bot forward for 1 second (with a few Green Neopixels on)
Stop motors (& clear all neopixels)
reverse (with some Red Neopixels on)
Here is my program, written in MicroPython:
from microbit import *
import neopixel
# pin13 gives access to the robot's neopixels.
myLightShow = neopixel.NeoPixel(pin13,12)
myLightShow[3]= (0,255,0)
myLightShow[4]= (0,225,0)
myLightShow[5]= (0,255,0)
myLightShow[9]= (0,255,0)
myLightShow[10]= (0,255,0)
myLightShow[11]= (0,255,0)
myLightShow.show()
#for driving the motors the following pins are used:
#pin8 (left wheel) and pin12 (right wheel) sets the direction.
#set pin to 0 for forward, set pin to 1 for reverse
# pin0 (left wheel) and pin1 (right wheel) sets speed. 0 - 1023 range
# both, therefore, are write_analog statements.
#Below, the 5 statements tell motors to go forward, at speed 300 for 1 sec
pin8.write_digital(0)
pin12.write_digital(0)
pin0.write_analog(300)
pin1.write_analog(300)
sleep(1000)
#Stop motors and clear neopixels (i.e. off)
pin0.write_analog(0)
pin1.write_analog(0)
pin8.write_digital(0)
pin12.write_digital(0)
myLightShow.clear()
# reverse at speed 350
pin8.write_digital(1)
pin12.write_digital(1)
pin0.write_analog(350)
pin1.write_analog(350)
# turn on selected neopixels and show.
myLightShow[0]= (255,0,0)
myLightShow[1]= (255,0,0)
myLightShow[2]= (255,0,0)
myLightShow[6]= (255,0,0)
myLightShow[7]= (255,0,0)
myLightShow[8]= (255,0,0)
myLightShow.show()
When i run the program on my bit:bot, it moves forward for 1 second, as expected, then stops (as expected) but then continues to move forward again!
I have been troubleshooting this for ages and don’t know what the problem is.
Can anyone help please? Thanks
Adding a sleep(1000) command seemed to rectify the issue and now the bit:bot moves as expected.

How to tell an IP address with 4 LEDs?

I am developing a net-managed device with the .NET Micro Framework. Since the idea is to have a bunch of devices in an office, sometimes it is necessary for the user to know the IP address of a specific device.
So I've been trying to come with ideas on how to indicate the IP address the user. The only user interface is 4 LED lights that I can blink on and off at varying speeds.
So far, the best idea I could come up with is this: seeing how the IP address has 4 parts and I have 4 LEDs, it would make sense that each LED be responsible for a single IP address part.
So for address like 192.168.0.34, I'd have LED1 blink once, then pause, then blink 9 times, pause, then blink 2 times. The action would then shift to the LED2, which would blink out 168 in a similar manner and so on. Number 0 would be indicated by blinking really fast for half a second.
Any other ideas?
Use all 4 displays at once for each number, showing it in binary. Blink all 4 really fast for a 0, light all 4 longer to denote a point.
[ ] [ ] [ ] [x] # 1
[x] [ ] [ ] [x] # 9
[ ] [ ] [x] [ ] # 2
[x] [x] [x] [x] # . (long)
[ ] [ ] [ ] [x] # 1
[ ] [x] [x] [ ] # 6
[x] [ ] [ ] [ ] # 8
[x] [x] [x] [x] # . (long)
[x] [x] [x] [x] # 0 (short)
Alternatively you can use an un-used number (ie: 10) to denote 0
[ ] [ ] [ ] [x] # 1
[x] [ ] [ ] [x] # 9
[ ] [ ] [x] [ ] # 2
[x] [x] [x] [x] # .
[ ] [ ] [ ] [x] # 1
[ ] [x] [x] [ ] # 6
[x] [ ] [ ] [ ] # 8
[x] [x] [x] [x] # .
[x] [ ] [x] [ ] # 0
Having a lookup table ready by the device should be enough for those who don't know binary.
I'd do the reverse. From a control station, I would bring up a list of all IPs used by my devices. I'd then select one to start blinking in a pattern that would be easy to recognize (like 1 2 3 4 over and over) until shut off. That way I could ask everybody who's LEDs are blinking like that and know what device owned that IP.
I'd then write the IP on the bottom of the device in magic marker. There's an amazing amount of bandwidth in a sharpie.
Provide a well-mounted cord for the user to swing the device around in the air like a lasso
Then flash the LEDs like a propeller clock
(source: embedds.com)
You might also consider binary, displaying a single digit at a time. But this would require the user to know (or take a crash course on) binary.
9: 1 0 0 1
8: 1 0 0 0
7: 0 1 1 1
6: 0 1 1 0
5: 0 1 0 1
4: 0 1 0 0
3: 0 0 1 1
2: 0 0 1 0
1: 0 0 0 1
0: 0 0 0 0
To indicate the decimal point, you could show 1 1 1 1. It would be ideal if you had a button or some form of user interaction so that you could iterate through the digits.
You could translate the number to HEX and print off the hex representation in binary.
F: 1 1 1 1
E: 1 1 1 0
D: 1 1 0 1
C: 1 1 0 0
B: 1 0 1 1
A: 1 0 1 0
9: 1 0 0 1
8: 1 0 0 0
7: 0 1 1 1
6: 0 1 1 0
5: 0 1 0 1
4: 0 1 0 0
3: 0 0 1 1
2: 0 0 1 0
1: 0 0 0 1
0: 0 0 0 0
192.168.0.34 becomes C0.A8.00.22. Very similar to the solution put forth by #JYelton, just taken a step further to reduce the amount of work an individual needs to do to read the message out of the LEDs. Still require a bit of translation though because you have to go from hex to decimal again (standard calculator is an easy/handy tool).
I'm thinking outside the box.. but one of the biggest complaints I see here is the translation. What about an app that takes a video (recording or prerecorded) and does the interpretation? This reminds me of iphone apps that can read upc codes.
Alternatively, but along the same thought, what about a parallel port or usb?
Why don't you get an external LCD screen... no teaching users binary and you can display loads more information. If you provide me with which micro framework device you are using I may be able to provide more detailed help.
LCDs - SparkFun <= good products and service
LCDs - Jameco
LCDs - Mouser
Could do it the way that the pulse dialing worked in the phone system. Basically one blink is zero, and it counts up from there.
1 = ** (2 blinks)
9 = ********** (10 blinks)
2 = *** (3 blinks)
Long Blink
1 = ** (2 blinks)
6 = ******* (7 blinks)
8 = ********* (9 blinks)
Long Blink
0 = * (1 blink)
0 = * (1 blink)
1 = ** (2 blinks)
Long Blink
2 = *** (3 blinks)
4 = ***** (5 blinks)
1 = ** (2 blinks)
Depending on how geeky your users are, you could also use:
Morse code
Display IP as a sequence of digits in binary
...
if it's DHCP, and they can access a list of the devices ip addresses on a computer next to the devices' MAC addresses, you could write the MAC address on each device and then they'd be able to tell which device had which IP.
If you think MAC addresses would be too un user friendly then you could have a table of the MAC addresses with a short description or the name of the devices.
Even more, you could write a program that got the list of ip addresses next to MAC addresses and matched it up with the table of device names next to MAC addresses.
If you replace one of the leds with an IR led, you can write an app for a cell phone IR sensor that decodes and displays the binary pattern for the IP address.
What about Broadcasting UDP packets and using a winforms app to listen for those packets. If you have multiple of these devices, the following might work.
Open Windows Client that is listening on the correct port.
Reset device or push a button on it to activate the UDP Broadcast.
Maybe combine the LED's flashing actively on that unit for 1 minute.
The Windows Client would then receive the IP Address and any other status information.
There may be an option here to set a unique ID (1-16 binary) in the device that is displayed on the device and broadcast with the IP Information. (??DIP Switches??)
This gets away from having users interpreting binary flashing of the LED's.
So device 1010 shows it's LED's and the output in the Windows App shows
On, Off, On, Off = 192.168.0.150
If you got fancy with this using Images of an LED On and Off would be even better.
I'm in a similar situation and haven't tested these theories yet.
Well, does the IP address need to be interpreted by a machine or by a human? Because your suggestion is using decimal digits, which is wonderful for humans but very complicated for computers to understand.
IP addresses are actually just a 32-bit binary number. The IP 192.168.0.34 is seen by the router (and broadcasted across the internet) as 11000000 10101000 00000000 00100010
If you're having a computer or other hardware device interpret the IP address, I suggest just using binary. You could have one light which displays the next digit, and another which toggles a "ready" light to indicate that the digit is in fact the next one and not a repetition of the previous one. This would only require 2 LEDs, and you would essentially display the aforementioned address like so:
on on,
on off,
off on,
off off,
off on,
off off,
off on,
off off,
on on,
off off,
on on,
off off,
on on,
off off,
off on,
off off,
etc.
Make sure the second bit has toggled before reading the first bit, otherwise you could read the same number twice.
If you want to display it using four LEDs for human interpretation then having the LEDs blinks according to digit might be difficult since humans have trouble counting 4 numbers simultaneously. It may be easier if you just went through all the digits 1, 9, 2, 1, 6, 8, 0, 0, 0, 0, 3, 4 (3 digits per number) and displayed these in binary using all four LEDs.
off off off on,
on off off on,
off off on off,
etc.
With a pause in between each one.
Adding an LCD display would work really well, but would add a lot to the cost. However, what about using 8 LEDs instead of 4? If you purchase the 8 LEDs in the form of a 7-segment LED display with decimal point, it might not cost much more than 4 discrete LEDs, but it would let you display the decimal digits of the IP address sequentially. No complicated translation scheme for the users to master.
It depends on your environment, but I'd not display an entire IP address, just the component that is relevant, and map that itself to a single 4-bit number. This assumes you only need to uniquely identify < 2^4 entities. If you need more, then just use more LEDs (if possible).
In this way, you'd only need to indicate a local mapping, which could then be used to look the actual IP address up via a local internal website. You can use the typical binary strategy that's been described in this thread already to have the LEDs flash out a 4bit number, and it should be pretty easy to train people on (which appropriate labeling on the device).