Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340
Warning: Cannot modify header information - headers already sent by (output started at /home/.sites/946/site2164767/web/blog/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php:340) in /home/.sites/946/site2164767/web/blog/wp-includes/feed-rss2.php on line 8
Thanks to chrisonline for the hint
]]>But there are always these prejudices from the “old age” ™. Changing the primary language in Windows always was impossible. If you really wanted to have Windows itself change, you had to re-install with a different installation medium.
This time I learned something from an older brother of mine. He is not an IT guy but wanted to change the language on a machine for one of his engine customers. I was all the “oh no, this is not possible” – way when he found out and told me: You can quite easily obtain more language packs for Windows 10 and you can switch your primary display langauge which will even include login screen if you want!
So just go to your control panel and start your journey. Note: Mix and match is possible, so you can pick different styles for numbers, dates, windows display language and keyboard layout. \o/
As always you do not only have a language but regions which define language, formattings and even dialects (the word for January differs between “German (Germany)” and “German (Austria)”!). Click “Add a language”. You will get a huge ammount to choose from. Get all you want.
Note they are not installed immediately:
Open the langauge and select to install the language pack.
This will download some megabytes and then require a reboot. Go back here afterwards.
Now define your Windows display language by selecting “Make this the primary language”.
After logged off and in you have no change your Windows display language:
Time to look at the advanced settings. Maybe you want to stick to your “old” keyboard layout? And not always select it after every reboot?
You can chose to have the input language not defined by the language list (where English is now number one for me) but select a dedicated layout. This still allows you to change the input language with the language bar at any time you want!
One more thing: Have a look at the link in the very first category here: “Apply language settings to the welcome screen, system accounts and new user accounts”. Click it and you can change these options, too. Very nice!
]]>But as a developer often enough I require an elevated prompt. You can right-click a shortcut as select “Run As Administrator” to achieve this. But the prompt opened by above feature is never elevated. Also there is no command to elevate it. Sure, you could just run runas /user:Administrator@localhost cmd
– but that is not running under your current user. Still I have not looked into the Linux subsystem features prepared by the Win 10 anniversary update – but I found this cool registry entry on the web which adds a second context menu entry which gives you an elevated prompt (of course, after UAC confirmation).
https://gist.github.com/ZoolWay/1df8ce81ba21b55b35a44ba468f0f04d
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\runas] @="Open elevated command window here" "Extended"="" "NoWorkingDirectory"="" "HasLUAShield"="" [HKEY_CLASSES_ROOT\Directory\shell\runas\command] @="cmd.exe /s /k pushd \"%V\"" [HKEY_CLASSES_ROOT\Directory\Background\shell\runas] @="Open elevated command window here" "Extended"="" "NoWorkingDirectory"="" "HasLUAShield"="" [HKEY_CLASSES_ROOT\Directory\Background\shell\runas\command] @="cmd.exe /s /k pushd \"%V\""
Credits belong here: http://www.sevenforums.com/general-discussion/75069-open-elevated-command-window-here.html#post657181
Have fun:
]]>So let’s go back to my old post. The steps involved creating a .nuspec file. With .NET Core this is no longer necessary, the new generation comes with some awesome command line utilities and a project.json
for all your project configuration tasks. You can create a .nupkg
with a simple dotnet pack
call. With some command line arguments you select the build configuration. But with a minimal project.json
you might miss some of the typical nuget setting. A blog post of Armen Shimoon reveals all the nice details, read it up: Where Does dotnet Get NuGet Package Metadata?
So with that knowledge we just have to add some authors
, owners
, releaseNotes
, projectUrl
, licenseUrl
, tags
and maybe others. The rest is up to dotnet pack -c Release
.
Oh, if you would like to take a look at that API proxy middleware, checkout GlacierCrates.AspNetCore.ApiProxy.
]]>
With Microsofts plans for the UWP and bringing Xbox One playing to the PC, Sonys move it is not a big surprise. In fact, with the Vita / PS TV remote play feature and Playstation Now the also should already have the tech. Nevertheless this was fast: With firmware update 3.50 remote play got compatible with PC (Win 8+) and Mac. The client can be downloaded from https://remoteplay.dl.playstation.net/remoteplay/lang/en/index.html.
So, if you have read on my old blog entries on remote play on the Playstation platform you can image that I was not very enthusiastic about it.
Let’s start with PC remote play. Installation and running the software is not problem at all. You have to connect your dualshock 4 controller with the micro usb interface to your computer and (if not already done) enable remote play on your PS4. A small hint for starters: Go right into the settings because it launches with 540p and refresh frequency set to “standard”. This will give you an unnecessary blurry experience. Go for 720p and set the frequency to “high”. This way play recordings will be disabled but if you do not need it these are the best settings.
I will not do a detailed text here but share my experience. With 720p set up the graphics will not be the best but good enough. And the input lag was highly minimized. I did some tests with Fallout 4, Rocket League, Shovel Knight and Resogun. Opposed to my former experience the input lag is now acceptable. Sony did a great job to improve on this.
Sure, this is not the same as playing with your PS4 at 1080p and you have to keep screen distance in mind. But this is not bad!
With this nice experience with the remote play feature on Windows I was wondering if the situation with Playstation Television has improved on behalf of that.
To keep things short here too: Yes! The input lag was also minimized with this update and using the PS4 on my Vita TV, oops, PS TV, is now an option again. Personally I would say that the graphic quality is better with PS TV than on PC but that could also be caused by the television and screen distance.
A nice fact to add: With the active standby mode of the PS4 the PC and the PS TV can even remotely start the PS4. Nice!
With the current results even Playstation Now feels more doable now – when we get the bandwidth
]]>With some log file rolling and different log levels it is mostly a good idea to log data which can be important, especially in production debugging. When you get the users to send you the log file or a feedback tool does that for them, great. Now you got your hands on some information which should look useful. Example:
2016-03-08 22:30:53,263 [8] DEBUG Zw.JsonLogViewer.AppBootstrapper - Creating bootstrapper 2016-03-08 22:30:53,717 [8] INFO Zw.JsonLogViewer.ViewModels.ShellViewModel - Loading last-used logfile: 'D:\Daten\Tech Files\Development\dotNET\..\bin\Debug\1\lastrun.json.log' 2016-03-08 22:30:53,729 [11] DEBUG Zw.JsonLogViewer.ViewModels.LogViewModel - Opening log 'D:\Daten\Tech Files\Development\dotNET\..\bin\Debug\1\lastrun.json.log' 2016-03-08 22:30:53,737 [11] DEBUG Zw.JsonLogViewer.Parsing.Parser - Parsing log file 'D:\Daten\Tech Files\Development\dotNET\..\bin\Debug\1\lastrun.json.log' 2016-03-08 22:30:53,859 [11] DEBUG Zw.JsonLogViewer.Parsing.Parser - Parsed 331 lines into 331 log entries 2016-03-08 22:30:53,860 [11] DEBUG Zw.JsonLogViewer.Parsing.Parser - Providing 6 keys as columns: date,level,appname,logger,thread,message
Write done what is important in a nice human readable way. No binary dumps needed
Okay, now that you got this 8MB of text right infront of you, the text editor for your choice will search for “ERROR”, a logger name and other subjects. Some advanced editors are able to hide all lines in a file which do not match your criteria. This way you can try to only show INFO messages.
When you have done this, you will find out that handling logs with several hundreds or even more lines can be a pain. Although these files are there to help you finding bugs – and might be your only debugging help in production scenarios (where it might be not possible to connect with a remote debugger).
Of course, I do not want to go back to any kind of proprietary log format – less readable and you have to write your own parser. A good idea is to go with a well know format. XML got infamous because most people do not like XML namespaces and the redundant information due to the closing tags. The fall of XML was the rise of JSON. It is a more lightweighted format (also there is an optional schema feature out there) and parsers are available for almost any programming language. If we provide the information about our log statements as JSON objects it could easily be parsed.
{"date":"2016-03-06T18:18:37.3018646+01:00","level":"INFO","logger":"State","thread":"9","message":"Beta 'Anzu' 2.2.1.3 starting"} {"date":"2016-03-06T18:18:37.4539737+01:00","level":"DEBUG","logger":"MyApp.App","thread":"9","message":"This log channel is DEBUG enabled and might contain really much information. For production usage we recommend setting the log level to INFO or WARN."} {"date":"2016-03-06T18:18:37.5140168+01:00","level":"INFO","logger":"MyApp.AppBootstrapper","thread":"9","message":"Creating bootstrapper..."} {"date":"2016-03-06T18:18:37.5820649+01:00","level":"DEBUG","logger":"MyApp.AppBootstrapper","thread":"9","message":"Running bootstrapper configuration"} {"date":"2016-03-06T18:18:37.7261679+01:00","level":"DEBUG","logger":"MyApp.SysCore.License","thread":"9","message":"Providing empty license without translation"} {"date":"2016-03-06T18:18:37.7411796+01:00","level":"DEBUG","logger":"MyApp.App","thread":"9","message":"Application is starting..."}
As you can see this approach assumes every file line is a JSON object. You could also have the complete file to be an array of JSON objects – but this would require to rewrite the end of the file all the time to enlarge the array. If the app crashed and the log writer cannot flush, you might end up with a destoryed JSON array. Therefore I prefer the “one line = one JSON object” approach.
You can image, this is slightly harder to read for a human but not too hard. Also using a text editor’s search feature might work even better because of the object property names visible all the time.
A format like this can be achieved in log4net with the additional libraries log4net.Ext.Json, log4net.Ext.Json.Serializers.Newtonsoft and (of course) Json.NET (former Newtonsoft.JSON, no .NET app using JSON without it). This is a rolling file appender configuration example:
<appender name="RollingFileJson" type="log4net.Appender.RollingFileAppender"> <file value="lastrun.json.log"/> <appendToFile value="false"/> <rollingStyle value="Size"/> <maxSizeRollBackups value="5"/> <maximumFileSize value="10MB"/> <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json"> <decorator type="log4net.Ext.Json.Serializers.Newtonsoft.NewtonsoftDecorator, log4net.Ext.Json.Serializers.Newtonsoft" /> <renderer type="log4net.ObjectRenderer.JsonObjectRenderer, log4net.Ext.Json"> <factory type="log4net.Ext.Json.Serializers.Newtonsoft.NewtonsoftFactory, log4net.Ext.Json.Serializers.Newtonsoft" /> </renderer> <default /> <remove value="ndc" /> <remove value="appname" /> </layout> </appender>
This is a lot of assemblies but you might use Json.NET anyways and the other two are due to the modularity. And you could still add your own renderer.
With all this great machine-readable output there is one question left.
I was suprised when I did not find a nice little tool which would parse any kind of JSON objects into a column based view. If you can recommend any tool for this I would highly appreciate any comment to this post!
What I was looking for was a tool where not all lines would require the same JSON object. There could be a property only added to specific log lines for example. The tool should not crash neither ignore an inconsist JSON object layout through the log file.
Did I say it would be easy to parse log entries in JSON format? Yes, it is. So I built a small MVVM application to open those files and be able to search, filter and sort log entries.
This small sample app is available at GitHub as open source under the Apache 2 license.
It currently features:
Known limitations:
This is just a small basic application but it might come in handy. And you are welcome to send push requests
The concepts here apply not only to the .NET platform but also Java, Ruby, etc – programming in general. Also there a companies providing specialized logging services for desktop and mobile apps. If you are going big, have a look at those – especially when going mobile or cloud where you might require to collect and analyze data from thousands of devices per day or even minute.
]]>Also a log: “a portion or length of the trunk or of a large limb of a felled tree.“
Back then one idea remained: What about when I just stream the video – but not the controller?
I now took some time to find it out. The basic idea is to connect remote play from the PS TV to my PS4 but using the controller connected to the PS4. That might work because the PS4 is quite near and the radio signal of the controller should be strong enough to connect directly to the PS4.
I switched on my PS4 with a controller and went over to the other screen. So what happens when PS TV connects to your PS4? First, the controller natively connected to the PS4 gets switched off. Okay, being in the other room – still near enough – I switched it on back without problems. But then I had to decide: Is the now “new” controller my user or another one? I am pretty sure I am myself so I selected my account. Unfortunately this resulted in remote play being disconnected! No chance to connect a controller to the PS4 assigned to my user. While I am not sure why Sony did it this way it is annoying.
Still I wanted to check if with a directly connected controller it would feel better (=less lag). So I connected again using a guest account. Sure, I got no PSN access and no save games. But I started a new game in Shovel Knight.
My subjective experience was still poor. Although I would say it was a bit better than using the controller connected to the PS TV it still had way too much lag.
This is my very own feeling about it but I would interpret it as that the video streaming has way too much lag. The controller only seems like a minor part of it (and logically is in terms of bandwidth).
Remember: My setup uses a gigabit full switched ethernet connection between PS TV and PS4.
I am not sure how Sony ever thought this could work and make anyone happy. With all the time the PS TV is already on the market and new romours that there will be now successor to the Vita I consider PS TV also to be dead. I just hope for one or two more games which run natively on the PS TV and make me happy with it
]]>With Visual Studio 2015, GitHub and NuGet you can easily publish the source code and binary library of your project to the open-source community! Of course you can do similar with other IDEs and platforms but those resemble to most popular ones.
Let us see how easily we can do this.
To try this out I am sharing a .NET geometry PCL library with the world, Zw.Geometry. It most not necessarly be very successful, wide-spread or popular but I just wanted to share it as I cannot find something as simple as it and still have some features to be added. So let us give back and provide others with the possiblity to use an existing library to rotate points in a 2D coordinate system without reading all those trigonometry formulars.
First we will require a GitHub account if you do not have already one. I will use GitHub to publish the source code and be able to share it with others and even be able to accept their inputs to my projects (push requests). Next, for those who will purely consume my library, I will require a NuGet account which is a wide-spread package manager for .NET tools and libraries. It is even not limited to Visual Studio as its command line tools are available of others IDEs and Mono too. With the account we can publish packages for others to use.
At this point I already started the small solution which consists of the main project file and a test project with the unit tests. With the Microsoft Git Provider the solution already has a local versioning repository.
So we create a new GitHub remote repository with which we will be able to sync. We should not include a README at this point, we can add it later.
After the creation GitHub shows us the URL to the repository, like https://github.com/ZoolWay/Geometry
In Visual Studio we can now select the Team Explorer, Home, Sync and setup the remote repository in the yellow highlighted Textbox (“Publish to Remote Repository”).
After that we can Sync or Push our commits to the remote repository.
Now you can check out your repository in the webbrowser in GitHub and should be able to see all your source code. You can now add a README and license file those will be downloaded to your local repository the next time you perform a sync. Note: That will not be visible in Visual Studio by default because they are not added to the VS solution file but you can see them in the file system and if you would like manually add them to your repository.
At this step you are ready to go. Find some friends to work on your project. They can checkout (subversion speaking) or more clone (git like) the repository.
When you have a nice library (or other project) most people just would like to use it. They are not interested in cloning the repository and have all the code. A binary and reference will be fine. This is what NuGet provides to the .NET community for quite some time now. The NuGet client is available as Visual Studio integration and command line utility but only the later will help you to pack your binary for the NuGet gallery.
I mostly followed the instructions from the NuGet docs and just encountered minor pitfalls here. Thanks to the extension Open Command Line I can just rightclick my project file and open the VS command prompt in the folder. But by default there is no NuGet command line utility so I downloaded it and put it into the folder C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools. It is then available in the path when using VS command prompts.
To create a new .nuspec file for your project you can just
nuget spec
After that I included the Zw.Geometry.nuspec into my solution to easily edit it from Visual Studio. Most things can remain unchanged as placeholders are used (which inject information from AssemblyInfo.cs when packing). I added URLs to my project and license and added some tags.
When everything is ready, the unit tests run fine and you do your first release you can run
nuget pack MyProject.csproj -Prop Configuration=Release -Build
Read the docs to get more information about other flags and dependencies to other projects.
The resulting MyProject.1.0.0.0.nupkg can be uploaded using the NuGet webinterface – or you can automate it with an API key and some scripts.
Those are the main steps. Of course there is many things left to really have a successful open source project but I felt a short starter like this would be helpful.
You can find my small sample library online:
]]>
But last week I could no longer resist to check that out by myself!
The price today is as low as 70 euros (in Austria) plus a sufficient memory card (the 1GB internal is not sufficient for very much when you would like to try Vita games). So I got myself a unit and a card from Amazon.
I will now give some insight at the two most interesting features for me. Because for streaming the SmartTV is more than satisfying in my case I did not check out other features. Also note that I used a DualShock 4 controller and I have connected my PS4 and PS TV both to my ethernet network (1.000 MBit/s).
For now I checked out two games: Resogun and Shovel Knight. They should cover some range of the PS4 game portpolio.
As Resogun is quite fast I was not expecting to much. And yes, I must agree with most online reviews. The input lag is too high for a game depending on reaction. While it works it does not feel right and and died quite more often than usually in this game.
The next game was Shovel Knight. Background to it is that it is a cross-buy title and I got it for PS4 as well as PS Vita (/TV) – so I would be able to try it out via Remote Play and directly on the PS TV.
While Shovel Knight is slower than Resogun I must sadly say the result is the very same. Via remote play it just does not feel right. Our beloved knight seem to be petulant and reacts milliseconds too late. With the outcome of many deaths and more frustation.
But let us compare: Thanks to the cloud feature I uploaded my savegame and loaded it into the PS TV version of the game. This improved my mood a lot as playing Shovel Knight natively on the PS TV turned out to be as much fun as on the PS4. It runs smoothly and without any problems!
Thanks to my PS+ membership I was already owning some PS Vita games although I do not own a device. So I started downloading all the stuff available from my PSN account to the PS TV (which filled the half of my 16GB memory card). These games do make a lot of fun and run fine.
But if you look out at all the PS Vita games you might get disappointed again! As I was told by other reviews, very few title of the PS Vita portfolio are really available to PS TV. If the game uses the touch feature of the Vita I can image reasons behind that. But even without those games there should be much more. Also sometimes things get even more interesting: While I found Danganronpa 2 (Goodbye Despair) compatible with PS TV the first part of the series Trigger Happy Havoc is not. I would enjoy to start with this (more of a) graphic novel but like to start from the beginning. So currently a no-buy to me
According to some discussions on the web this is even not a problem of the developers (Spike Chunsoft) or the publisher (NIS) but of Sony itself. I am not sure why because the developer should be able to make a variant without the need for the touch input and mark the game as PS TV compatible – which obviously has happen for the second part.
I would highly like to see improvements here!
Both features, Remote Play and the Vita compatibility, need much more improvement from Sony. With the integration of the Xbox One and Windows 10 gaming (and streaming) there might be the necessary competition to make Sony rework it a bit. I hope so.
Also it occured to me that I could try to use a controller directly connected to the PS4 instead of the one connected to the PS TV. That could perhabs eliminate the input lag and only the display latency would remain. This means the distance to the PS4 should not be too big but in my case it could work. I will give that a try sometime and report back.
And, yes. That means I did not send my Playstation TV back. I decided to keep it – already addicted to Persona 4 Golden
]]>I was a fan and user of Windows 8.1 before. So with no doubt I registered for the free upgrade program. This week the time had come and my Windows told me it would be ready to upgrade. While most will prefer to do a clean install I was eager and courious – would an upgrade without a fresh installation really work? I gave it a try.
Long story short: After some installing and rebooting I switched from Windows 8.1 to Windows 10 in less than an hour – automatically!
Windows 10 is amazing and I encourage everyone to upgrade!
If you are still Windows 7 you might find Windows 10 much more attractive than 8. My machine feels faster now and I like the clean but tile-supporting start menu. It just feels like the right evolution of my operating system.
I do not want to keep some minor problems a secret. I ran only into two issues: