BinChunker is an application that converts .bin "Disc Image" files to .iso with the help of a .cue file.
The application is unfortunately Unix-only (which includes Mac OS X and Linux) due to the use of a number of non-standard C headers - in fact, the code will fail to compile on a Windows "cross-native" Linux layer like MingW64
$ gcc bchunk.c -o bchunk
bchunk.c:61:24: fatal error: netinet/in.h: No such file or directory
#include <netinet/in.h>
^
compilation terminated.
Fortunately, a fix has been published by mzex for use of BinChunker on Windows, however it does not come with the source code (only a binary encoded in base64 format).
Tags:
windows force scroll lock
microsoft wireless keyboard scroll lock
microsoft arc keyboard scroll lock
trigger scroll lock without keyboard
trigger scroll lock
Apparently, one of the hardest video-editing task to do with a script is to create a dynamically-timed slideshow without any fancy-drag and drop GUIs.
With Adobe After Effects, you cannot dynamically load external images using an expression (they will need to be loaded into your project beforehand, and even then, you cannot load the image into a comp with an expression).
And adding hundreds of layers of images and having to go through each and every one of them to edit the expression is a fairly tedious task.
Worse of all, every change that you make - such as adding a new image to the slideshow - will compound towards the chore of doing things manually.
With "Python: PIL to mp4", a simple blending transition was created using PIL and OpenCV, But the objective of this post is to introduce timings to delay the animation for numerous/multiple images.
We can extend this idea of having a primitive transition to allow for an image to be delayed from transitioning until a certain amount of time has elapsed, and to allow the transition to occur after "x" amount of seconds, hence forming a slideshow.
Process
Initialization
So to start off with, we're going to need some data to work with.
Since it's Python, you can do whatever you want to feed data in - you could use a JSON file, CSV, Pickle, whatever you're comfortable with, or perhaps, whatever arbitrary file format that you're locked into using.
But here, a basic python array will be used to indicate the timings and image file that will be fed into the slideshow, amongst other data...
As you can see in the data above, the most relevant data is songData[][0] and songData[][4], indicating the timings (in seconds) and the image file locations, respectively.
We're going to set the FPS of the slideshow... 60FPS is the standard nowadays, so we're going to set that and process the songData above to reflect this...
FPS = 60 # Sets the FPS of the entire video
currentFrame = 0 # The animation hasn't moved yet, so we're going to leave it as zero
startFrame = 0 # The animation of the "next" image starts at "startFrame", at most
trailingSeconds = 5 # Sets the amount of time we give our last image (in seconds)
blendingDuration = 3.0 # Sets the amount of time that each transition should last for
# This could be more dynamic, but for now, a constant transition period is chosen
blendingStart = 10 # Sets the time in which the image starts blending before songFile
for i in songData:
i[0] = i[0] * FPS # Makes it so that iterating frame-by-frame will result in properly timed slideshows
Now the first image is going to be loaded in by the script - as so:
im1 = Image.open(songData[-1][4]) # Load the image in
im2 = im1 # Define a second image to force a global variable to be created
current = songData[-1][4] # We're going to let the script know the location of the current image's location
previous = current # And this is to force/declare a global variable
And next up is to create the actual OpenCV video handling capability. You can have a read-up about this here: Python: PIL to mp4
height, width, layers = np.array(im1).shape # Get some stats on the image file to create the video with
video = cv2.VideoWriter("slideshow.avi",-1,60,(width,height),True)
So that was the basic initialization routine. If you don't get how it works together yet, don't worry. Just read on - as the full code with everything combined is below.
Main loop
So the strategy behind generating this slideshow is to loop through each and every frame and continuously feed that into our output video file. Sure some corners can be cut - by which you only generate the transitions (leaving the gaps to be manually filled by an external program) - but this post is looking more into automating the entire slideshow generation process with only Python, PIL and OpenCV.
We're going to have a main while loop that sets the limit on how long our slideshow should last.
while currentFrame < songData[0][0] + FPS * 60 * trailingSeconds: # RHS defines the limit of the slideshow
And this is where the nitty gritty kicks in: the actual code that makes the transition between each image within the slideshow...
for i in songData: # Loop through each image timing
if currentFrame >= i[0] - (blendingStart * FPS): # If the image timing happens to be for the
# current image, the continue on...
# (Notice how songData is reversed)
# The print statement adds some verbosity to the program
print str(currentFrame) + " - " + str(i[0] - (blendingStart * FPS)) + " - " + i[2]
if not current == i[4]: # Check if the image file has changed
previous = current # We'd want the transition to start if the file has changed
current = i[4]
startFrame = i[0] - (blendingStart * FPS)
# The two images in question for the blending is loaded in
im1 = Image.open(previous)
im2 = Image.open(current)
break
# See: http://blog.extramaster.net/2015/07/python-pil-to-mp4.html for the part below
diff = Image.blend(im1, im2, min(1.0, (currentFrame - startFrame) / float(FPS) / blendingDuration))
video.write(cv2.cvtColor(np.array(diff), cv2.COLOR_RGB2BGR))
currentFrame += 1 # Next frame
The ending to this program is pretty self-explanatory...
# At this point, we'll assume that the slideshow has completed generating, and we want to close everything off to prevent a corrupted output.
video.release()
All together now!
So here's all the code required to create a timed image slideshow with PIL and OpenCV v2!
Code:
from PIL import Image
import cv2
import numpy as np
songData = [
[390, u'Fractal', u'Itvara', 'minimix', u'image1.jpg'],
[322, u'Case & Point', u'Error Code', 'minimix', u'image2.jpg'],
[261, u'Excision & Pegboard Nerds', u'Bring the Madness (Noisestorm Remix) [feat. Mayor Apeshit]', 'minimix', u'image3.jpg'],
[157, u'Nitro Fun', u'Final Boss', 'minimix', u'image4.jpg'],
[88, u'Astronaut', u'Quantum (Virtual Riot Remix)', 'minimix', u'image5.jpg'],
[0, u'Fractal', u'Contact', 'minimix', u'image6.jpg']]
FPS = 60 # Sets the FPS of the entire video
currentFrame = 0 # The animation hasn't moved yet, so we're going to leave it as zero
startFrame = 0 # The animation of the "next" image starts at "startFrame", at most
trailingSeconds = 5 # Sets the amount of time we give our last image (in seconds)
blendingDuration = 3.0 # Sets the amount of time that each transition should last for
# This could be more dynamic, but for now, a constant transition period is chosen
blendingStart = 10 # Sets the time in which the image starts blending before songFile
for i in songData:
i[0] = i[0] * FPS # Makes it so that iterating frame-by-frame will result in properly timed slideshows
im1 = Image.open(songData[-1][4]) # Load the image in
im2 = im1 # Define a second image to force a global variable to be created
current = songData[-1][4] # We're going to let the script know the location of the current image's location
previous = current # And this is to force/declare a global variable
height, width, layers = np.array(im1).shape # Get some stats on the image file to create the video with
video = cv2.VideoWriter("slideshow.avi",-1,60,(width,height),True)
while currentFrame < songData[0][0] + FPS * 60 * trailingSeconds: # RHS defines the limit of the slideshow
for i in songData: # Loop through each image timing
if currentFrame >= i[0] - (blendingStart * FPS): # If the image timing happens to be for the
# current image, the continue on...
# (Notice how songData is reversed)
# The print statement adds some verbosity to the program
print str(currentFrame) + " - " + str(i[0] - (blendingStart * FPS)) + " - " + i[2]
if not current == i[4]: # Check if the image file has changed
previous = current # We'd want the transition to start if the file has changed
current = i[4]
startFrame = i[0] - (blendingStart * FPS)
# The two images in question for the blending is loaded in
im1 = Image.open(previous)
im2 = Image.open(current)
break
# See: http://blog.extramaster.net/2015/07/python-pil-to-mp4.html for the part below
diff = Image.blend(im1, im2, min(1.0, (currentFrame - startFrame) / float(FPS) / blendingDuration))
video.write(cv2.cvtColor(np.array(diff), cv2.COLOR_RGB2BGR))
currentFrame += 1 # Next frame
# At this point, we'll assume that the slideshow has completed generating, and we want to close everything off to prevent a corrupted output.
video.release()
Sample output
So with all the code above, it begs the question, why do I need to create a slideshow using scripts?
Well, here's a little sample of what you can do with a simple little slideshow.
Note the timings from "songData",
If you're having trouble piping image data frame-by-frame into FFMpeg (with the subprocess module), you may be interested in another way to convert python image data into a movie without having to store each individual frame as a file (whether it be .png, .jpg, .gif sequences).
However, this method is a little more complicated then attempting to get FFMpeg to work with python, so here's a little scenario to help with whether or not this tutorial is for you.
Let's say you're in a scenario, where you've encountered one of these errors:
"AttributeError: 'Popen' object has no attribute 'proc'"
Please note that the OpenCV version used is version 2, which uses
import cv2
as the import statement, as opposed to something like
import cv
There may be an update to OpenCV that breaks the code like with the answer found in the following link. image - Python JPEG to movie - Stack Overflow.
But without further ado, let's jump right into it!
Imports
We're going to be using PIL for loading and manipulating the images, NumPy for a PIL-to-OpenCV bridge, and OpenCV Version 2 for the actual image-to-movie process.
So our imports will look something like
from PIL import Image
import numpy, cv2
Manipulation
Obviously, the purpose of using python to convert from PIL to a movie is to be able to manipulate the image frame-by-frame using the power of PIL.
So here, I'm going to demonstrate some basic image blending functionality, just to provide a basis for this tutorial.
Here, we have two images, demo3_1.jpg and demo3_2.jpg...
demo3_1.jpg
demo3_2.jpg
With PIL, you can do something like
# Imports can be found in the "Imports" section above
# Load up the first and second demo images
image1 = Image.open("demo3_1.jpg")
image2 = Image.open("demo3_2.jpg")
# Create a new image which is the half-way blend of image1 and image2
# The "0.5" parameter denotes the half-way point of the blend function.
images1And2 = Image.blend(image1, image2, 0.5)
# Save the resulting blend as a file
images1And2.save("demo3_3.jpg")
In order to use PIL to blend two images together, in this case, the two images are blended at the halfway point, which means that half of each image is merged to become the resultant blended image.
demo3_3.jpg
This is a primitive version of an "additive blend", so you can think of it as an "additive frame blending using PIL" - note also that ImageChops isn't used for simplicity, but that's some additional power that you can use to manipulate images with.
Writing a video with OpenCV
With OpenCV, there's a "VideoWriter" method which you can access to create a movie with.
The method goes something like this:
video = cv2.VideoWriter(filename, codec selection, frames per second, (width, height))
Writing to the VideoWriter can be done with "video.write( numpy array as string )", and the VideoWriter can be "closed" by using "video.release()".
And that's all you need to know to convert from PIL to mp4 (or at least a movie, you need a certain codec for conversion to mp4).
All together now
With all the elements from the sections above in mind, here's the code in action
# Imports can be found in the "Imports" section above
# Load up the first and second demo images, assumed is that image1 and image2 both share the same height and width
image1 = Image.open("demo3_1.jpg")
image2 = Image.open("demo3_2.jpg")
# Grab the stats from image1 to use for the resultant video
height, width, layers = numpy.array(image1).shape
# Create the OpenCV VideoWriter
video = cv2.VideoWriter("demo3_4.avi", # Filename
-1, # Negative 1 denotes manual codec selection. You can make this automatic by defining the "fourcc codec" with "cv2.VideoWriter_fourcc"
10, # 10 frames per second is chosen as a demo, 30FPS and 60FPS is more typical for a YouTube video
(width,height) # The width and height come from the stats of image1
)
# We'll have 30 frames be the animated transition from image1 to image2. At 10FPS, this is a whole 3 seconds
for i in xrange(0,30):
images1And2 = Image.blend(image1, image2, i/30.0)
# Conversion from PIL to OpenCV from: http://blog.extramaster.net/2015/07/python-converting-from-pil-to-opencv-2.html
video.write(cv2.cvtColor(numpy.array(images1And2), cv2.COLOR_RGB2BGR))
# And back from image2 to image1...
for i in xrange(0,30):
images2and1 = Image.blend(image2, image1, i/30.0)
video.write(cv2.cvtColor(numpy.array(images2and1), cv2.COLOR_RGB2BGR))
# Release the video for it to be committed to a file
video.release()
Note that when you run the code above, you'll get a prompt for codec selection...
It is possible to find a codec for direct .mp4 conversions, however here, the default "Intel IYUV" codec was chosen and used.
From this stage as well, you can use FFMpeg (outside of Python) or your favourite video conversion program to convert from the codec that you selected to the format that you want, which can indeed include .mp4 files... ImageMagick was used to convert the output to the gif below:
And that's it!
Note that this post was made specifically for OpenCV v2, as documentation online were frustratingly for OpenCV v1, which has different methods and such.
As a disclaimer, things might change in a newer version of OpenCV, so this information is correct as of July 2015.
Covered Topics:
PIL to mp4 conversion
PIL to movie conversion
PIL/Python/OpenCV Video file from Images
PIL/Python/OpenCV JPEG to movie
Creating an OpenCV movie from PIL images
Converting an OpenCV movie into PIL Images
Suppose you have an image that has been manipulated with the Python Imaging Library, and you want to convert that image into a format that can be understood by the OpenCV Version 2 Library.
To do that, as of OpenCV v2, you can use the NumPy array as an intermediary format between the two libraries, where NumPy can convert PIL data into the NumPy array format, and OpenCV v2 can recognize the NumPy array natively.
To demonstrate this conversion, here's some code.
# First you need to import the libraries in question.
import numpy
import cv2
from PIL import Image
# And then you need a PIL image to work with, for now, an image from a local file is going to be used.
PILImage = Image.open("demo1.jpg")
demo1.jpg
# The conversion from PIL to OpenCV is done with the handy NumPy method "numpy.array" which converts the PIL image into a NumPy array.
opencvImage = numpy.array(PILImage)
# Display the OpenCV image using inbuilt methods.
cv2.imshow('Demo Image',opencvImage)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Which results in:
However, as you can see in the demonstration, the output OpenCV image turned a little weird, with the colour not matching the original PIL image (in the sense that the OpenCV image having the wrong colours). You can try this out for yourself...
This is because we're dealing with a multi-channel/"RGB" format and not a single channel image file, and a conversion from PIL to OpenCV involves a little bit of additional translation, this can be solved with OpenCV's "cvtColor" method.
To demonstrate this additional translation, here's some code.
# First you need to import the libraries in question.
import numpy
import cv2
from PIL import Image
# And then you need a PIL image to work with, for now, an image from a local file is going to be used.
PILImage = Image.open("demo2.jpg")
demo2.jpg
# The conversion from PIL to OpenCV is done with the handy NumPy method "numpy.array" which converts the PIL image into a NumPy array.
# cv2.cvtColor does the trick for correcting the colour when converting between PIL and OpenCV Image formats via NumPy.
opencvImage = cv2.cvtColor(numpy.array(PILImage), cv2.COLOR_RGB2BGR)
# Display the OpenCV image using inbuilt methods.
cv2.imshow('Demo 2 Image',opencvImage)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Which results in:
And that's it!
Note that this post was made specifically for OpenCV v2, as documentation online were frustratingly for OpenCV v1, which has different methods and such.
As a disclaimer, things might change in a newer version of OpenCV, so this information is correct as of July 2015.
Covered Topics:
PIL to NumPy conversion
PIL to cv2 conversion
PIL to OpenCV conversion
Adaptors.PIL2Ipl alternative/replacement/not working
Creating an OpenCV image from a PIL image
Converting an OpenCV image into a PIL Image
This is the Windows Store app. Or, at least it would be if it worked. For now, it's just a splash screen...
Well, if would still be a splash screen if it wasn't for the fact that after a long wait, an error message appears.
The one I got first was:
We weren't able to connect to the Store. This might have happened because of a server problem or the network connection might have timed out. Please wait a few minutes and try again. (0x80072ee2)
The next attempt in opening the store app resulted in another error:
We weren't able to connect to the Store. This might have happened because of a server problem or the network connection might have timed out. Please wait a few minutes and try again. (0x80190190)
Note how, in both cases, the error code was different...
So if you're currently encountering an error message with the same error codes, then you're in luck, since there is a fix! If the error code and problem is similar (but not exactly the same) then in any case just have a read through and see if your problem gets fixed.
But on the off-chance that you are naturally suspicious of anything that anyone makes, here's a simple Base64 to PNG Windows application that can convert from Base64 to PNG offline and without internet.
If you've ever used Google Chrome (which, as of 2014, means that you're in the majority of users), then you may have gotten a bright red text mocking you, claiming "Unknown Network Error" besides it.
Upon investigation, usually, something incomprehensible usually manifests itself, for example, the download stopped at 99% without any explanation, leaving behind a corrupted file.
Now, if you've ever been in a situation where you've been downloading that critical file that really needed to be downloaded, or the 99% represents hundreds of megabytes - even gigabytes of data, and it's that one missing bit that would warrant the entire file to be re-downloaded (since the checksum in zip files are something out of this world), then the "Downloaded File Completer" will help patch up the file and run as good as new.
Now, this tool works fine in any web browser, be it Firefox or Google Chrome, but since I primarily use Chrome myself, the tool has only really been tested it with a download that Chrome branded "Unknown Network Error",
As such, if you have a file on your computer with the file extension ".crdownload", and the title looks something along the lines of "Unconfirmed [random number].crdownload", then locate the original URL of the corrupted file, and run it through this tool to repair it!
As I was moving operating systems a while back, I needed a lightweight BitTorrent client on Windows that could be able to contact the protocol and download a single file - an operating system disc image.
Now this was once a part of an ongoing project that was to be published quite some time ago, but I haven't gotten around to it yet.
The operating system in question is SteamOS, I wanted to install SteamOS on my computer. Well, it failed. The SteamOS distro that Valve themselves provide failed to work on my computer.
Luckily though, there is a version of Valve's SteamOS that is built with a custom partitioning feature, and other cool features.
However, it was only downloadable through BitTorrent. Imagine that! Here we have one of the many situations where Open source software is distributed through torrent networks!
Anyways, the bittorent clients that I found were all installers, and none really seemed to not shadow install some service that assisted with torrenting.
Though the issue is, is that it still comes in an installer...
So to save you some time and space, here it is, Transmission QT in a universal .zip package (so that no prerequisites are needed to extract the portable folder): Download 64Bit: Transmission_x64.zip (11.0 MB)
MD5: 0d336b521cace7063b6147360d6c03db
SHA256: 51c5576a5ac38632ca0c0c619c4a18cc4529ef47
If you dislike the closed-source nature of µTorrent, or dislike the tracking software that it installs on your computer, or dislike the fact that you have to go through an installation process, or even if you dislike µTorrent for installing junk onto your computer to make money (through EpicScale Riskware), then use Transmission if you're on Windows.
This portable version of Transmission guarantees that other junk/risky software does not got installed alongside the torrent client, as it only contains the executable of transmission, hence you can see that there is no other software that is bundled with it.
Transmission itself is an open source initiative, unlike uTorrent, so you know that the code within Transmission is safe, because you're able to read the source code yourself to check for any suspicious code.
Microsoft, yes, I'm looking at you Micro$oft. This article is all about you.
Now, there was once this Windows 8.1 PRO key. That worked.
And let's just say, that there was a person like me, who used this key.
And used it on a second-rate laptop.
Oh, and guess what. When Windows 8.1 was installed on said laptop, all sorts of funny business occured.
Like a reboot loop in "getting devices ready" after it was reinstalled a second time, but that will be a story for another day.
Getting a reboot each attempted boot into Windows 8.1 lead to an unstable and ultimately unusable operating system
But, I don't want to bash Microsoft too hard, I mean, I had loved the Windows operating system all my life.
It's just that the Windows 8.1 installation simply did not work.
It froze after you used it for around 10 minutes (prompting the power button to be held down).
And I've waited and waited for hours to recover the laptop from Windows 8.1's freeze. Nope. Perma-freeze.
So I gave up on Windows 8.1, and like all sane people, booted into Ubuntu and deleted the partition.
Partitions were destroyed and new ones were rebuilt upon its foundations, the Windows 8.1 partition is shown to be missing from the partition table, only leaving behind the OEM Windows 7 install and ALOT of linux distros to fill its space
A few months passes. And we're right about here in this point in time.
New CPU, New Motherboard, New HardDrive, practically a new skin - a brand new day.
i7 4770k, SSD storage... Just the way I would like a computer....
Windows 8.1 installed? Check...
Ubuntu installed? check...
But wait, what is this?
Windows 8.1 failed to activate and is giving me this annoying pop-up every so-often?
Got the "Activate Windows" popup for some reason
Isn't this kind-of like the Windows XP genuine advantage thing?
Windows 8.1 PRO failed to activate. With a proper RETAIL key that has worked before.
What is this madness? Why won't it work now?
Guess what.... After diving down in the depths of computer activation command, and desperately trying to trace the issue. I figured it out.
The old laptop
Somehow, the Windows activation was still adamant that it was installed on that computer.
It wasn't.
And so, being me. A quick Windows 8.1 re-installation on the laptop occurred... Quick meaning around 40 minutes....
The boring setup stages were passed, and the madness continued.
slmgr -ato
Worked on the laptop, not on the computer.
Tried to deactivate Windows 8.1 on the laptop that Microsoft's servers still thinks that it's activated at...
slmgr -upk
Was used on both computers, more then 5 times... NOPE. Apparently, the laptop was permanently activated
GG...
slmgr -dli
Well, yer, the code is retail....
slmgr -ipk
Managed to activate on both computers, amazingly... Well, "activate" meaning the code was confirmed. (It didn't "activate" on the computer)
Attempting to confirm if the Windows 8.1 key that I've been using is valid
Well apparently it is... The key activates on the laptop, but not the computer...
And so.
MCIROCTSOFT$ $UPPORT!
This is where things get really fun. After trying out a non-obtrusive way to deactivate a windows installation to move to another computer, the second-last resort was really to call Microsoft Support.
Because, well, it's a legitimate RETAIL key that's paid for, and so "legitimate support" was to be offered.
And boy, was I wrong..
*Calls Microsoft Support through Skype*
Robot: Welcome to Microsoft Support, Please press 1 for windows activation on a new machine. Please press 2 for microsoft office activation. Please press 3 for visual studio....
Me: *Presses 1*
Robot: Please enter the installation ID
Me: *Mood: Angry, Thought: WTF*
*Enters in the long and tedious installation ID*
Robot: It appears that this activation code has been used in another computer.....
Me: *Mood: WANTING TO WRECK STUFF, Thought: WTTTFFF???*
Robot: Transferring you to customer support.. Please hold the line.
Me: *...*
Robot: ...
Customer Support (human being!): Are you trying to activate Windows, Word....?
Me: Windows
Customer Support: What is the installation ID
Me: *Mood: Silently pissed off*
*Verbally communicates installation ID for a very long time*
-> 6 minutes later
Customer Support: It appears that you have activated the code in another machine.
I cannot help you with this, I am transferring you to a technician. Please hold the line
Me: *Thought: So, I came all this way.... For.... This?*
Robot: Invalid phone code. Invalid phone code. Invalid phone code. *Disconnect*
Me: *Thought: Wow did Micro$oft fail badly.. Customer support was really the same as the machine activation and was just as reliable (not so much)..*
-> After another 9 minutes, and the entire installation process pops up, another customer support pops up. This customer support was just like the other, and was just as reliable.
-> He asks for the installation ID, and when he cannot give me a confirmation number, asks to transfer me. "Hold the line".
-> And the whole call disconnects. Again...
So as you can see, so far, piracy would of allowed me to skip through bad customer support. Because, when you pirate software like Windows 8.1, there would be no point in handling them.
If you have the legal ground to pirate software, then by all means, do so.
""Legitimate support"".. "Legit support guise...".. "You had one job..."..
I ended up printing out the installation ID, and recalling them.
Now instead of pressing "1" in the robotic voice prompt, I waited.
After 3 cycles, the message announces: "It appears that you have a problem. Please press 1 to contact customer support".
Basically, square one.
But this time around, the most jaded operator came on and asked for the installation ID.
> For some more context, it had already taken an hour of messing around with command prompt, uninstalling/reinstalling product keys, restarting computers both at the same time (when activated and not, and when both unactivated at the same time) to get to this stage.
> And to make things even worse, it was 4 IN THE MORNING! (5 AM by third customer support operator).
Now, he sacastically mocked a celebration: "Congratulations! You have a confirmation number".
"Do you see the boxes with the letters?"
Boxes with letters? More context: I had printed out the installation ID. I don't have any boxes..
And so, said yep, and basically, a funny reversal of roles played out. He was doing the talking, I was doing the copying...
I mocked typed characters into the box that I couldn't see..
More context: The computer doesn't have a microphone, so I had to plug it at the front, where I had to sit on the ground to speak into, and hence not see the screen clearly (why I printed out the installation ID in the first place...)
And after a few confused exchanges of words, we parted ways.
Aka, he asked for me to complete a satisfaction survey - not with that jaded attitude, I haven't even activated windows yet!
and... asked me to "concern", aka disconnect...
After calling Microsoft Support multiple times to claim a valid Windows 8.1 key on another computer (which I have rights to use), it finally ""paid"" off and Windows 8.1 successfully activated... Through I could've activated it faster by just pirating the operating system.
This is why you pirate. You don't have to handle bad customer service for a product that you have purchased...
If I was to have used an external activator, then my legitimate Windows 8.1 keys would be honoured and used without problem.
This is also a reason why customer support should be improved in a setting with money involved.
I installed Ubuntu because I like the concept of having a recovery operating system.
But now.. Now it seems like Ubuntu is about to be my best friend... And I will make the judgement to pirate the next time an event like this occurs again.
Gist/TL;DR
To move a Windows 8.1 / Windows 8 installation from one computer to another, call up Microsoft Support and wait until you get prompted by customer support.
He(/she) will most likely parrot the robot operator, but will give you a valid confirmation number/code.
If you liked his(/her) service, give him feedback, and complete his survey - I didn't like the service I got as a whole and hence refused to complete the survey.
Moving a Windows 8.1 installation from one computer to another will not be 100% anonymous or automated. Unless you get extremely lucky.
The slmgr.vbs commands do not affect Microsoft's servers.
Pirate Windows 8.1 if you're moving from one computer to another and own a valid Windows 8.1 key, you have a right to do so, and this right is actually explicitly stated in Windows 8.1's SLA as follows: "Can I transfer the software to another computer or user? You may transfer the software to another computer that belongs to you.
You may also transfer the software (together with the license) to a computer owned by someone else if a) you are the first licensed user of the software and b) the new user agrees to the terms of this agreement. To make that transfer, you must transfer the original media, the certificate of authenticity, the product key, and the proof of purchase directly to that other person, without retaining any copies of the software. You may use the backup copy we allow you to make or the media that the software came on to transfer the software. Every time you transfer the software to a new computer, you must remove the software from the prior computer.
You may not transfer the software to share licenses between computers. You may transfer Get Genuine Windows software, Pro Pack or Media Center Pack software only together with the licensed computer." - The words from the little document you have to accept before installing Windows 8.1...
Microsoft needs a better support system. Else they, themselves pretty much promote the pirating of their software, since pirating software is more convenient then the recommended channels to "activate" software. The end product is realistically the same with the same legality (see: SLA).
These reasons also add to the list of reasons as to why you should pirate: To avoid dodgy customer support and to get the products that you have the rights to access.
I have been doing some research on how Adobe is delivering its setup files through its CDN, and found Adobe's way of delivering data unique, to say the very least...
Data is delivered through a sort-of proprietary method, and requires an "Adobe dance" to access (sort-of like an OAuth dance involving HEAD and GET requests) -
But not must of a challenge compared to what other CDNs do to hide their data...
Here's a simple .json file of their latest CC products, if you've come this far to be able to extract the initial stages of downloading apps from Adobe...
By itself, it means absolutely nothing.
But the bottom line is that Adobe CC's CDN is wide open for anyone to download...
Once you get the gist of everything, Adobe CC setup files can be downloaded just like a regular file.
Comes in conveniently .7zipped files for some of it as well... Open source software has come a long way...
Application to shutdown your Windows XP, Vista, 7, 8, 8.1 computer after a predefined amount of time. So that you can allow your computer to upload files, leave and have it shutdown automatically.
It's better then using CMD to blindly time a shutdown time.
There's no ads, virus, malicious software, and the program is both lightweight and portable, being a simple program.
Recently, I got sick and tired of having to go through the process of downloading programs full of bloat and "full version" ad messages, along with other things - just to have a simple program that converts image files into BMPs.
But I also didn't just want any regular program, I didn't want to see a fully featured, super cooked "additional features" program, I wanted simple a drag and drop program that gets the job done on thousands of images.
So instead of downloading freeware programs loaded with toolbars, adware and all the other junk, and instead of loading the images one-by-one into Microsoft Paint and converting them all manually, I created a simple program that you can just drag, drop and have a bitmap image from common image formats.
I don't claim to have created a program that can convert millions of image formats to bitmap, just common formats: .jpg, .png and .gif* all seem to work fine.
There's no ads, virus, malicious software, and the program is both lightweight and portable, being a simple program.
So here it is:
Download: http://static.extramaster.net/imagetobmp.html (2018 edit: looks like what was once detected as a perfectly clean file is now suddenly detected as a false positive malware, aw well, I should've open sourced the software on day-one, but then it would compile to the same binary and still be considered malware)
Note:
This .net program requires .net v4 or higher.
The program is not malicious and does not contain any toolbars, adware, or malware. It's only 33,280 bytes (~33kb if you're uncertain of the notation), so it's extremely lightweight and easy to download. And it gets the job done.
I do not keep track of anything that happens to that program (it does not auto-update, no data gets sent to any website, etc.), so as a simple disclaimer, I am not responsible for what "image to bitmap" does to your dog, cat, goldfish or horse. Or everything else asides from that...
This program overrides bitmaps that share the same appended name (file name+appended file extension) by default, which shouldn't be a big deal since the file extension is being appended, however if it does become an issue, just uncheck "Override File?"
* With animated .gif files, you only get the first frame as a bitmap, with normal .gif files, you get what you'd expect as a bitmap.