tag:blogger.com,1999:blog-49218314092557372712024-03-18T20:47:55.482+01:00Zchpit, czyli o programowaniu i nie tylko...zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.comBlogger113125tag:blogger.com,1999:blog-4921831409255737271.post-28617359328539224852022-02-24T08:01:00.005+01:002022-02-24T08:02:55.359+01:00Figma (online blackboard)<p>For several years I have been working remotely in a fully distributed team. Working in a distributed team means that sometimes we need tools that we would not normally need. An example of such a situation is the simultaneous work of several people at the blackboard.</p><p>Everyone who has worked in a programming team knows how useful a blackboard can be, where two or more developers can come and start writing and explaining various problems at the same time.</p><p>One of the tools that is trying to replace the table for distributed teams is the Figma application. We used it yesterday in our Scrum retrospective and it generally worked. The team decided that the tool is ok and it lived up to its opinion, so I leave a note on the blog here if I ever look for a name for this solution in the future.</p><p><br /></p><p>Links:</p><p></p><ul style="text-align: left;"><li><a href="https://www.figma.com/">Project website</a></li><li><a href="https://en.wikipedia.org/wiki/Figma_(software)">Wikipedia page</a></li></ul><p></p>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-32303614073132485972022-02-18T08:32:00.004+01:002022-02-18T08:32:43.982+01:00OWASP ZAP<p>Yesterday I was at a local .net group meeting. One of the presentations was about automatic tools for improving code quality. The first of the presented tools was the SonarQube that is a tool for static code analize that I know and use. The second presented tool for dynamic UI testing in terms of security was OWASP ZAP. It is a "proxy" tool, i.e. it is used to place it between the browser and the visited page, which can view or modify information sent from / to the browser. If anyone has used Fiddler, know what a "browser proxy" is (same type of tool but improved).</p><p>OWASP ZAP in the default mode is used to make the user use the page in "normal" mode, and the tool underneath checks for any security vulnerabilities. If someone uses Selenium for automatic tests, then by connecting OWASP ZAP gets additional safety tests.</p><p>It is also possible to run OWASP ZAP from the script level, which makes it possible to insert it into the CI / CD tool or to generate a weekly report. It is recommended to test on a different instance than production / test because full tests can take a long time and generate server load.</p><p>Tool is Open Source and supported by Community.</p><p>Summary:</p><p>We have 3 main modes: </p><p></p><ul style="text-align: left;"><li>the user clicks on the page himself (useful when we have an automatic tester using Selenium) </li><li>basic scanning mode (useful to plug into a CI / CD tool and test automatically, e.g. with a larger deploy)</li><li>full scan mode (takes a long time, so it should be done on a separate server in a night task mode).</li></ul><div><br /></div><div>Linki:</div><div><ul style="text-align: left;"><li><a href="https://en.wikipedia.org/wiki/OWASP_ZAP">Wikipedia</a><br /></li><li><a href="https://www.zaproxy.org/">Project web page</a><br /></li><li><a href="https://github.com/zaproxy/zaproxy">Project source code (github)</a><br /></li><li><a href="https://owasp.org/">OWASP fundation page (fundation for web security upgrade)</a><br /></li></ul></div><p></p>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-18849545161708499942022-02-04T12:10:00.004+01:002022-02-04T12:10:47.677+01:00SonarQube<p>SonarQube is a tool for static analise of code. It detects bugs, security issues, copied code blocks, unit test covarege and other code smells. It have a great feature for multiple work configuration, in example "full project" and "new code" analise. This is a great option for supporting and attaching this for old software written years ago. </p><p>In my current project we have integrated this tool into Azure Pipelines so we run this on each merge on branch master (what is a good solution). SonarQube also have a plugin into Visual Studio that we can see our bugs when we code.</p><p>My opinion: This is a tool that we needed few years ago in one of my previous companies. I regret that I don't know this tool earlier.</p><p><br /></p><p>Links:</p><p><a href="https://www.sonarqube.org/">Official website</a></p><p><a href="https://en.wikipedia.org/wiki/SonarQube">Project page on wikipedia</a><br /></p>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-67524862608421598012019-02-14T17:05:00.002+01:002019-02-14T17:06:45.896+01:00Swagger.ioGood tool for creating JSON API documentation with included free tool for test this API. It is compatiblie with .net core 2.0 API (and .net core 2.0 web app with json result) and for me this is a good choice. It's also free for commercial use (GNU GPL licence) that makes it very useful.<br />
Direct link to tool -> <a href="https://swagger.io/">https://swagger.io/</a>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com1tag:blogger.com,1999:blog-4921831409255737271.post-42292577218112813782018-05-25T10:33:00.001+02:002018-07-06T16:49:39.602+02:00Setting Different Colors for Connections in SSMSNew (for me) "killer feature" of <span style="background-color: white; color: #2a2a2a; font-family: "arial" , "helvetica" , sans-serif; font-size: 12.8px;">SQL Server Managment Studio: Setting different colors for different servers in SSMS. This can reduce some "lunch test script on production" bugs. </span><br />
<span style="background-color: white; color: #2a2a2a; font-family: "arial" , "helvetica" , sans-serif; font-size: 12.8px;"><br /></span>
<span style="background-color: white; color: #2a2a2a; font-family: "arial" , "helvetica" , sans-serif; font-size: 12.8px;">More details here: </span><span style="color: #2a2a2a; font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: 12.8px;"><a href="http://www.sqlservercentral.com/articles/Management+Studio+(SSMS)/101920/">http://www.sqlservercentral.com/articles/Management+Studio+(SSMS)/101920/</a></span></span><br />
<span style="color: #2a2a2a; font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: 12.8px;"><br /></span></span>
<span style="color: #2a2a2a; font-family: "arial" , "helvetica" , sans-serif;"><span style="font-size: 12.8px;">p.s. it's a small thing that make me happy ;-)</span></span>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com1tag:blogger.com,1999:blog-4921831409255737271.post-56872275999632431712018-04-07T12:53:00.001+02:002018-04-13T12:14:49.816+02:00Alternative ToDo you ever wonder what is an alternative software to one, that you are familiar with, but in some reasons you can't use it?<br />
In example, adobe pdf reader is free to home use but can't be used as embedded in your app and can't be run on company server (due to its licence).<br />
<br />
In that situations we need to look for alternatives. We can use <a href="https://www.google.com/">google.com</a> or <a href="https://duckduckgo.com/">duckduckgo.com</a> for searching our alternative programs, but we can also use dedicated site created for that purpose: <a href="https://alternativeto.net/">alternativeto.net</a>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-45286896293312043382018-04-07T11:24:00.001+02:002018-11-05T15:13:09.475+01:00PostmanIn current web development most communication between systems is done using API. <span class="short_text" id="result_box" lang="en"><span class="">In most cases it is <a href="https://stackoverflow.com/questions/671118/what-exactly-is-restful-programming">REST API</a>.</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="">When working with external API or even when we need to set API for somebody else it would be great to have some good tool for REST API testing. And here comes </span></span><a href="https://www.getpostman.com/"><span class="short_text" id="result_box" lang="en">Postman.</span></a><span class="short_text" id="result_box" lang="en"> </span><span class="short_text" id="result_box" lang="en"></span><span class="short_text" id="result_box" lang="en"> </span><br />
<br />
<span class="short_text" id="result_box" lang="en">Postman is free tool for REST API testing, with many functions, easy GUI, and ready for automation testing. Many web developers already use this tool (in example me) and I </span><span class="short_text" id="result_box" lang="en"><span class="short_text" id="result_box" lang="en"><span class="">recommend you to test and maybe you too will start using it in you current work.</span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span></span>
<span class="short_text" id="result_box" lang="en"><span class="short_text" id="result_box" lang="en"><span class="">External links:</span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="short_text" id="result_box" lang="en"><span class=""><a href="https://www.getpostman.com/">getpostman.com</a> -> website where you can get postman tool</span></span></span>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-51955707168541613902017-11-29T15:17:00.000+01:002017-11-29T16:13:44.968+01:00TypescriptSyntaxPasteHave you ever manualy copy C# class to TypeScript class (in example from xyzViewModel.cs to xyzViewModel.ts) ??<br />
<div>
Now, thanks to free visual studio plugin you can make simply 'copy/paste" and whole conversion from C# class to TypeScript class will be done automaticly.<br />
<div>
<br /></div>
<div>
<a href="https://marketplace.visualstudio.com/items?itemName=NhaBuiDuc.TypescriptSyntaxPaste">tool for Visual Studio</a><br />
<a href="https://marketplace.visualstudio.com/items?itemName=rafaelsalguero.csharp2ts">tool for Visual Studio Code</a></div>
</div>
zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-27093898425731724212017-10-31T21:26:00.001+01:002019-07-01T16:28:48.006+02:00.net developer days 2017 (conference)<span class="short_text" id="result_box" lang="en"><span class="">It's been over a week since conference .net developers days 2017 ( <a href="http://2017.net.developerdays.pl/">link to conference page</a> ). </span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">The .net developer days is the biggest, official microsoft .net conference in Poland and one of the biggest conferences </span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">dedicated to .net framework</span></span> in Europe. This 2017 edition was located as previous in Warsaw and took 3 days (one day workshops, and two days of conferences). I took part only in conferences. </span></span></span></span></span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">Here are my </span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">thoughts about this conferences. </span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class="">This </span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">thoughts </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>are not representative and some aspects are omitted. They are just my own<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""> thoughts about this conferences. I don't plan to </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">discuss every presentation that I participate. If you are looking </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">abstract of presenations it's the wrong place. </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<br />
<h3>
<b><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">The good:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></b></h3>
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><b>- Dino Esposito</b> -> my colleagues from work had</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""> very good memories of Dino from last year and they could not wait for him.</span> <span class="">If they could not wait for him, that means me either. </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">And I was not disappointed. Dino was one of the bright star of that conference and </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">I remember him very warmly. He had 3 presentations:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- ethics in work / conferences. Don't work for technology buzzwords. Work for your client needs.</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- new functionality of SQL Server 2016 and 2017 -> every table will now can have it's own history (second </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">built-in table for storing changes history) </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- UI session -> user on each platform (PC / Smartphone) expects different UI</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><b>- Daniel Marbach </b>-> great session about async/await and the task parallel library. One of the best conferences speech in this conference. Tricky topic but</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""> necessary. If I had some free time I would practice task from his presentation (<a href="https://github.com/danielmarbach/Await.HeadExplosion">available on github</a>). I regret that I don't saw his second speech.</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><b>- Cloud </b>-> this topic started to be </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">discussed in various scenarios. It's time to start thinking about it (and learn something about it).</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span>
<span class="short_text" id="result_box" lang="en"><span class=""><b>- Food</b> -> it was delicious. Especially the dinners.</span></span><br />
<br />
<h3>
<b><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">The bad:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></b></h3>
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><b>Too long </b>-> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">Thursday was too long. We came at 9 am and the last prelection ends at 7 pm. And there were also Q&A with speakers. Whole planed to 10 pm. That was too long. </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">I came before the end and I really don't know about they talk at the end. I also talk with few friends and they don't know either :-(</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><span class="short_text" lang="en"><span class=""><br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<br />
<h3>
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><b>And the ugly:</b></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></h3>
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><b>cards with colors </b>-> </span></span><span class="" id="result_box" lang="en"><span class="">Missed cards with colors to evaluate the session after departure. I like those cards </span></span><span class="short_text" id="result_box" lang="en"><span class="">because I can notice what session I missed and is it worth to watch them later in youtube.</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="">- <b>smog </b>-> </span></span><span class="short_text" id="result_box" lang="en"><span class="">when the conference was held we had a little smog in Warsaw and I feel it. After some time</span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""> my head ached. I don't like smog :( </span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com2tag:blogger.com,1999:blog-4921831409255737271.post-17326024868112478852017-10-20T23:28:00.001+02:002017-10-20T23:48:08.840+02:00Open Street Map in Xamarin FormsI'm not fan of mobile development, but I can't live witchout my smartfone. Why I'm not fan of mobile development? Because a year or two ago I have tryied to learn java development on Android platform. I have take course on Coursera. I have passed first two courses for mobile development but I didn't liked Android architecture. For me it was another ".net web forms" development style.<br />
<br />
But now many things have changed. Now, we have new Xmarin platform, that ofers us two types of develompent:<br />
a) native -> for those, who like native development in Android or iPhone (not me) but written in C#<br />
b) forms -> .net abstraction based on XAML and MVVM architecture (like in WPF).<br />
<br />
To not have to simple task I have decided to make something more complicated than 95% web tutorials. My choise is to use some advanced functions, but not "native supported". My choice was to use "Open Street Map" in Xamarin Forms.<br />
<br />
There is a Open Street Map library for Android. But there are only few information how to use them in Xamarin Forms. The best simple solution for start that I found was: <a href="https://development-blog.eu/an-own-map-with-mapsui-in-xamarin-forms-entwurf/">https://development-blog.eu/an-own-map-with-mapsui-in-xamarin-forms-entwurf/</a><br />
<br />
I decided to make some upgrades of this solution :D<br />
I hope you will like it :)<br />
<br />
<h3>
<b>First: Make some user friendly modification of existing code: </b></h3>
- unload UWP project (who use windows phone nowdays anyway?? ;-)))<br />
- set Compile using Android Version (Target framework) to Android 6.0 -> My smartphone have Android 6.0 and I like to check this app on real phone<br />
<br />
<h3>
Second: Set starting location:</h3>
This is just a few lines of codes in MainPage.xaml.cs file:<br />
<blockquote class="tr_bq">
<br />
//add this using<br />
using Mapsui.Projection;<br />
<br />
//add this code inside public MainPage() constructor<br />
var centerOfWarsaw = new Point(21.107886, 52.2127475);<br />
// OSM uses spherical mercator coordinates. So transform the lon lat coordinates to spherical mercator<br />
var sphericalMercatorCoordinate = SphericalMercator.FromLonLat(centerOfWarsaw.X, centerOfWarsaw.Y);<br />
// Set the center of the viewport to the coordinate. The UI will refresh automatically<br />
mapControl.NativeMap.NavigateTo(sphericalMercatorCoordinate);<br />
// Additionally you might want to set the resolution, this could depend on your specific purpose<br />
mapControl.NativeMap.NavigateTo(mapControl.NativeMap.Resolutions[9]);</blockquote>
<br />
What is worth to mention is convertion from google maps standard of geolocalisation <span style="background-color: white; color: #222222; font-family: "arial" , sans-serif; font-size: 12.8px;">EPSG:4326 to Open Street Map geolocalisation standard </span><span style="background-color: white; color: #222222; font-family: "arial" , sans-serif; font-size: 12.8px;">EPSG:3857</span><br />
<span style="background-color: white; color: #222222; font-family: "arial" , sans-serif; font-size: 12.8px;"><br /></span>
<br />
<h3>
Third: Add another shape:</h3>
This is just adding another shape:<br />
<br />
<blockquote class="tr_bq">
<span style="white-space: pre;"> </span> var feature2 = new Feature<br />
<span style="white-space: pre;"> </span> {<br />
<span style="white-space: pre;"> </span> //warsaw<br />
<span style="white-space: pre;"> </span> Geometry = new Polygon(new LinearRing(new[]<br />
<span style="white-space: pre;"> </span> {<br />
<span style="white-space: pre;"> </span> SphericalMercator.FromLonLat(21.074181, 52.277191),<br />
<span style="white-space: pre;"> </span> SphericalMercator.FromLonLat(21.057358, 52.210131),<br />
<span style="white-space: pre;"> </span> SphericalMercator.FromLonLat(20.981483, 52.238944),<br />
<span style="white-space: pre;"> </span> SphericalMercator.FromLonLat(21.074181, 52.277191),<br />
<span style="white-space: pre;"> </span> })<br />
<span style="white-space: pre;"> </span> ),<br />
<span style="white-space: pre;"> </span> ["Label"] = "Warsaw",<br />
<span style="white-space: pre;"> </span> ["Type"] = "My Feature Type"<br />
<span style="white-space: pre;"> </span> };<br />
<span style="white-space: pre;"> </span> features.Add(feature2);</blockquote>
This code is just "copy->pase" previus code. New thing is that I named Label "Warsaw" (and previus label is now kwnown as "West Germany") and points localisation is in EPSG:4326.<br />
<br />
<h3>
Finaly: Show native popup when user click's on shape</h3>
<div>
<br /></div>
<div>
Inside <b>mapControl.NativeMap.Info += (sender, args) =></b> code block of MainPage() constructor check if featureLabel is not null: </div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
<span style="white-space: pre;"> </span> if (!string.IsNullOrWhiteSpace(featureLabel))<br />
<span style="white-space: pre;"> </span> {<br />
<span style="white-space: pre;"> </span> ShowPopup(featureLabel, featureType);<br />
<span style="white-space: pre;"> </span> }</blockquote>
</div>
<div>
<br /></div>
<div>
and execute method:</div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
<span style="white-space: pre;"> </span> async void ShowPopup(string feature, string type)<br />
<span style="white-space: pre;"> </span> {<br />
<span style="white-space: pre;"> </span> if (await this.DisplayAlert(<br />
<span style="white-space: pre;"> </span> "You have clicked " + feature,<br />
<span style="white-space: pre;"> </span> "Do you want to see details?",<br />
<span style="white-space: pre;"> </span> "Yes",<br />
<span style="white-space: pre;"> </span> "No"))<br />
<span style="white-space: pre;"> </span> {<br />
<span style="white-space: pre;"> </span> Debug.WriteLine("User clicked OK");<br />
<span style="white-space: pre;"> </span> }<br />
<span style="white-space: pre;"> </span> }</blockquote>
You shoud see something like this:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj6_nVPbV20YVqKli1PGeKDa2a0y2xthngJHDcvOvA1Gey4no1fvAIPskiaOE0puem8RUPzlByVQlGNuCpNw9SBgc1Tzb_3YEaDVqRM3AkvdVtlCyXDEk78hJ7vf_JJI1Peu7ZSAf3uqI/s1600/Screenshot_20171020-232210.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="900" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj6_nVPbV20YVqKli1PGeKDa2a0y2xthngJHDcvOvA1Gey4no1fvAIPskiaOE0puem8RUPzlByVQlGNuCpNw9SBgc1Tzb_3YEaDVqRM3AkvdVtlCyXDEk78hJ7vf_JJI1Peu7ZSAf3uqI/s320/Screenshot_20171020-232210.png" width="180" /></a></div>
<br />
Final code for this app you will find on my github profile: <a href="https://github.com/zchpit/OPM_in_XamarinForms">link to code</a><br />
<br />
References:<br />
<a href="https://development-blog.eu/an-own-map-with-mapsui-in-xamarin-forms-entwurf/">Base project, that I have upgraded</a><br />
<a href="https://www.xamarin.com/forms">Xamarin forms official page</a><br />
<a href="https://www.openstreetmap.org/">openstreetmap.org</a><br />
<a href="http://epsg.io/map#srs=3857&x=2340747.284562&y=6844469.826521&z=14&layer=streets">http://epsg.io -> map, that you can switch many epsg formats</a></div>
zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com2tag:blogger.com,1999:blog-4921831409255737271.post-66555437263726367742017-02-28T21:40:00.001+01:002017-04-29T18:35:23.359+02:00Astronauts exists. I've just meet oneIn 2001 <span class="author vcard">Joel Spolsky has wrote his great blog post about <a href="https://www.joelonsoftware.com/2001/04/21/dont-let-architecture-astronauts-scare-you/">Software Astronauts.</a> I have readed it in 2006, some times heard about astronauts in conferences but never meet any one in my </span><span class="author vcard"><span class="short_text" id="result_box" lang="en"><span class="">professional life</span></span>. Up to day. </span><br />
<br />
<span class="author vcard">The best describe of "typical astronaut" we can find in legendary speak of Wojciech Seliga in Confitura 2012 (java concefence) in 7.45-9.00 (minute) <a href="https://www.youtube.com/watch?v=zvVkD7huKAE#t=465">link to his speach</a></span><br />
<span class="author vcard"><br /></span>
<span class="author vcard">Our astronaut:</span><br />
<span class="author vcard">- is old </span><br />
<span class="author vcard">- </span><span class="short_text" id="result_box" lang="en"><span class="">excessive</span> opinion <span class="">about himself</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- don't like to write code</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- don't understand business domain (this is real scary)</span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- don't understand our company culture</span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- don't understand product that we are making (he treats it like another CRUD but we are not making CRUD app)</span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""> </span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- all the time talk about the abstraction</span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- all the time talk about breaking changes in current architecture</span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- try to fix problems that don't exists</span></span></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- making </span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">conflicts</span></span> in team</span></span></span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">Epilogue</span></span>: that developer worked in our team about 2 weeks and had been moved to other team with different team leader. That team wants him to implement </span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">functionality</span></span> of some basic control. </span></span></span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">Instead of </span></span>that, after a week he don't show his code but came up with L4 </span></span></span></span><span class="short_text" id="result_box" lang="en"><span class="">(sick leave). </span></span><span class="short_text" id="result_box" lang="en"><span class=""> </span></span>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-35293864101202365822017-02-23T00:06:00.001+01:002017-02-23T00:09:01.208+01:00.NET Standard Library (Portable library)About few months ago me and my team have started new project in .net core. We wanted to use the newest technology that is on market (in .net world). After few months we discovered, that not every component in .net ecosystem is written in ".net core way". For example EntityFramework (at this moment there is version EF.core) or WCF (at this moment we still need to use .net 4.6.2).<br />
<br />
In one project we have library (.dll) that was used by:<br />
a) .net 4.6.2 solutions (WCF)<br />
b) .net core solutions (our main Web App, tests, and others)<br />
<br />
First we used .net core library, after that we have changed to .net 4.6.2 library (and git have problems with branch changes old/new library). But in situations, when we need to use some library in both, .net core and .net 4.6.2 solution there is better way. It's called .NET STANDARD LIBRARY.<br />
<br />
.NET STANDARD LIBRARY is a new library type project (.dll) that can be used in many different project types in example: .net 4.6.2, .net core, mobile applications. It have some limitations, but in general this is a big step in good direction.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://msdnshared.blob.core.windows.net/media/2016/09/dotnet-today.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://msdnshared.blob.core.windows.net/media/2016/09/dotnet-today.png" width="320" /></a></div>
<br />
There is good blog post in MSDN -> <a href="https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/">https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/</a><br />
<br />
If you newer heard about .net standard library you should read about it. zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-36456452723683669882016-10-24T19:13:00.001+02:002016-10-24T19:13:59.910+02:00RevDeBug In last <span class="short_text" id="result_box" lang="en"><span class="">Thursday I have pleasure to take part in Warwaw .NET User Group and hear about new logging tool named "RevDeBug".</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="">RevDeBug is a .net tool, that can be joined to any .net solution at compile time and after compiled into .net solution it collect information about call stack. It's not "error call stack" that we know from standard exception stacktrace. It collects any information, about how code was executed so we can watch how aplication works line by line like we usually do it in debuger. But this time, this code is from production/uat/whatever server.</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="">For me it is quite interesting tool. Maybe I will use it in future in production when I find some very tricky error. </span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="">Cons: </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- logs can be really huge, in example 1GB of logs can be taken in 15-20 minutes (or maybe even less)</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- </span></span><span class="gt-baf-word-clickable">performance - every logging tool working live on production </span><span class="short_text" id="result_box" lang="en"><span class="">lowers </span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class=""></span></span><span class="gt-baf-word-clickable">performance of </span>our application</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class=""><a href="https://www.revdebug.com/">https://www.revdebug.com/</a> -> project web site</span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class="">Session about RevDeBug in English (from .net Leipzig Meetup)</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""> </span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/QQqvf-KMOLQ/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/QQqvf-KMOLQ?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<table class="gt-baf-table"><tbody>
<tr><td><br /></td><td colspan="2"><br /></td><td style="width: 100%;"><br /></td><td style="width: 100%;"><br /></td></tr>
</tbody></table>
<div id="gt-input-tool">
<div id="itamenu">
<span class="ita-kd-inputtools-div"></span></div>
</div>
<div id="gt-input-tool">
<div id="itamenu">
<span class="ita-kd-inputtools-div"></span></div>
</div>
zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-85253101036701483972016-08-14T22:20:00.001+02:002016-08-14T22:20:52.006+02:00HTML 5 Local Storage vs CookiesWhile I was solving <a href="https://www.facebook.com/events/1112826942122943/">Weekly Javascript Chalange Task 3</a> I ask my self a quite interesting question. What is a difference between Local Storage and Cookies?<br />
Somebody already asked that question on SO: <a href="http://stackoverflow.com/questions/3220660/local-storage-vs-cookies">http://stackoverflow.com/questions/3220660/local-storage-vs-cookies</a> ,and there is a very good answer:<br />
<br />
<blockquote class="tr_bq">
<div class="post-text" itemprop="text">
Cookies and local storage serve different purposes. Cookies are primarily for reading <b>server-side</b>, local storage can only be read <b>client-side</b>. So the question is, in your app, who needs this data — the client or the server?<br />
If it's your client (your JavaScript), then by all means switch.
You're wasting bandwidth by sending all the data in each HTTP header.<br />
If it's your server, local storage isn't so useful because you'd have
to forward the data along somehow (with Ajax or hidden form fields or
something). This might be okay if the server only needs a small subset
of the total data for each request.<br />
<b><i>You'll want to leave your session cookie as a cookie either way though.</i></b><br />
As per the technical difference, and also my understanding:<br />
<ol>
<li>Apart from being an old way of saving data, Cookies give you a limit of <b>4096</b> bytes (4095, actually) - its per cookie. Local Storage is as big as <b>5MB per domain</b> - <b><a href="http://stackoverflow.com/questions/2989284/max-size-of-localstorage-values">SO Question</a></b> also mentions it </li>
<li><code>localStorage</code> is an implementation of the <code>Storage</code> Interface. It stores data with <b>no expiration date</b>, and gets cleared <b>only</b> through JavaScript, or clearing the Browser Cache / Locally Stored Data - unlike cookie expiry.</li>
</ol>
</div>
</blockquote>
<br />
Why I mention about it? For two reasons:<br />
a) I use this blog as my notepad, that I sometimes visit<br />
b) this question have a great "interview question" potential<br />
<br />
<br />
<br />zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-35687874296096317832016-08-13T19:07:00.004+02:002016-08-13T19:19:42.290+02:00Weekly JavaScript ChallengeThis note is to promote some great event that I have found in internet.<br />
<br />
Michał Miszczyszyn is one of polish javascript community leader and
he starts new weekly javascript chalange.
It works, that Michał ones a week create new javascript task, and any
competitor can join and try to solve that task. After that time (about one week) Michał takes
responses and makes code review.<br />
When he finish code reviews he put task review on
his blog.<br />
<br />
What a great oportunity for learning new language with code review. Seems great. What you think about it?<br />
<br />
I think, that I try to solve some challenges in my free time, but not <span class="short_text" id="result_box" lang="en"><span class=""> guarantee that they where </span></span><span class="short_text" id="result_box" lang="en"><span class="">will appear regular.</span></span><br />
<br />
Links:<br />
Michał blog: <a href="https://typeofweb.com/">https://typeofweb.com</a><br />
Michał blog posts about chalange: <a href="https://typeofweb.com/tag/weekly-javascript-challenge/">https://typeofweb.com/tag/weekly-javascript-challenge/</a><br />
facebook group where we can find news about new challenge: <a href="https://www.facebook.com/groups/1131907053499522/">https://www.facebook.com/groups/1131907053499522/</a><br />
First task event: <a href="https://www.facebook.com/events/997187053723327/">https://www.facebook.com/events/997187053723327/ </a><br />
My solutions on github: <a href="https://github.com/zchpit/WeeklyJavaScriptChallenge">https://github.com/zchpit/WeeklyJavaScriptChallenge</a> <br />
My solution for task 1 in jsFindle: <a href="https://jsfiddle.net/vknqwnb8/15/">https://jsfiddle.net/vknqwnb8/15/</a>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-47037431498908282962016-07-31T22:34:00.001+02:002016-07-31T22:34:54.374+02:00Review of tools for PDF generate in .net This is my first blog post in English, so fill free to add your comment if any part is <span class="short_text" id="result_box" lang="en"><span class="">incomprehensible.</span></span><br />
<br />
We have many pdf libraries that we can use, but none of them are perfect and all of them have some advantages and disadvantages. Here is my little <span class="short_text" id="result_box" lang="en"><span class="">experience with generating PDF file in .net framework with generating reports both, in a browser on demand and large numbers in bash/console by night.</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span>
<span class="short_text" id="result_box" lang="en"><span class=""><a href="https://pl.wikipedia.org/wiki/Crystal_Reports">Crystal_Reports </a>- big, commercial library develop by big company </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Pros: </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- can be really fast</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Cons: </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- ugly (at least not pretty) reports</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- works on my machine issue (your report </span></span><span class="short_text" id="result_box" lang="en"><span class="">can be seen different in different machine, in example on server what can be </span></span><span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">frustrating when troubleshooting</span></span>). </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span>
<span class="short_text" id="result_box" lang="en"><span class=""><a href="https://en.wikipedia.org/wiki/SQL_Server_Reporting_Services">SQL_Server_Reporting_Services</a> - </span></span><span class="short_text" id="result_box" lang="en"><span class="">big library that comes with commercial licence for MS SQL Server</span></span><span class="short_text" id="result_box" lang="en"><span class=""></span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Pros:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- </span></span><span class="short_text" id="result_box" lang="en"><span class="">quite </span></span><span class="short_text" id="result_box" lang="en"><span class="">pretty</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- have many in common with office / excel, so you BI can help you in building reports</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- can use custom fonts </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Cons:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Local Mode:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- have memory leaks (you will see it when you try generate PDF in large numbers)</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- more complicated reports can be really slow (reporting services team upgrading reporting services from .net 3.5 to 4.0 made bug with grouping rows in table).</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- don't have justify text </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- you can't "copy/paste" document from MS Word</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Server Mode:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- sometimes there are issue with authentication and priviliges</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- you can't use collection of your objects as data source (it was a reason why I choose Local Mode).</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- don't have justify text </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><span class="short_text" id="result_box" lang="en"><span class="">- you can't "copy/paste" document from MS Word</span></span> </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span>
<span class="short_text" id="result_box" lang="en"><span class=""><a href="http://wkhtmltopdf.org/">Wkhtmltopdf</a> - open source library made by google for converting html into pdf</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Pros:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- </span></span><span class="short_text" id="result_box" lang="en"><span class="">quite fast</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Cons:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- graph from jQuery library are medium quality (in </span></span><span class="short_text" id="result_box" lang="en"><span class="">magnification you can see pixels)</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- </span></span><span class="short_text" id="result_box" lang="en">few <span class="">options for editing</span> <span class="">text</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class=""><br /></span></span>
<span class="short_text" id="result_box" lang="en"><span class=""><a href="https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.aspx">MS Word Interop</a> - native MS Word API for CRUD operations in word documents</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Pros:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- best </span></span><span class="short_text" id="result_box" lang="en"><span class="">MS Word document projection</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Cons:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- slow</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- need to have MS Office Word installed on working machine </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- requires a little work and workarounds when we want to use it from task scheduler ( <a href="http://stackoverflow.com/questions/1006923/automating-office-via-windows-service-on-server-2008/1680214#1680214">http://stackoverflow.com/questions/1006923/automating-office-via-windows-service-on-server-2008/1680214#1680214</a> )</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- requires a much more work when we want to use it from IIS </span></span><br />
<br />
<span class="short_text" id="result_box" lang="en"><span class=""><a href="http://www.telerik.com/kendo-ui">Telerik - Kendo-UI</a> - commercial library to creating great html, and export it to pdf</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Pros:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- quite pretty</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- write html and just export it into pdf</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">Cons:</span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- have trouble with custom fonts </span></span><br />
<span class="short_text" id="result_box" lang="en"><span class="">- pdf generation could be faster </span></span><span class="short_text" id="result_box" lang="en"><span class=""></span></span><br />
<div id="gt-input-tool">
<div>
<span class="ita-kd-inputtools-div"></span></div>
</div>
<div class="g-unit" id="gt-src-c">
<div id="gt-src-p">
</div>
</div>
<span class="short_text" id="result_box" lang="en"><span class=""> </span></span>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com5tag:blogger.com,1999:blog-4921831409255737271.post-73716214862675797152016-07-02T22:41:00.000+02:002016-07-02T22:41:33.800+02:00ELMAH<a href="http://code.google.com/p/elmah/">ELMAH, czyli </a><a href="http://code.google.com/p/elmah/">Error Logging Modules And Handlers (ELMAH) </a>- jest to biblioteka/moduł dostępny za darmo służący do zarządzania oraz monitorowania błędów w oprogramowaniu. Moduł ten oparty jest na śledzeniu zdarzeń i można go podpiąć do istniejącej aplikacji bez zmiany ani jednej linii kodu (zmiany wykonujemy tylko w konfiguracji). Główne zadania ELMAH-a, to obsługa, zarządzanie, monitorowanie, eskalacja błędów, ze szczególnym uwzględnieniem błędów nieobsłużonych.<br />
<br />
Główne zalety/funkcjonalności ELMAHA:<br />
- prostota konfiguracji<br />
- prosty interfejs webowy pokazujący szczegółowe dane<br />
- odkładanie błędów do bazy danych / plików xml / etc<br />
- przechwytywanie i logowanie nieobsłużonych błędów<br />
- wysyłanie maili i notyfikacji w momencie wystąpienia błędów<br />
- logowanie wszystkich lub tylko wybranych typów błędów<br />
- darmowa biblioteka <br />
- możliwość logowania w sposób "tradycyjny" z poziomu C#<br />
( <span></span><span class="typ">ErrorSignal</span><span class="pun">.</span><span class="typ">FromCurrentContext</span><span class="pun">().</span><span class="typ">Raise</span><span class="pun">(</span><span class="pln">e</span><span class="pun">);</span> )<br />
<br />
<pre class="code_block prettyprint prettyprinted">
</pre>
Z tego tez powodu uważam, że warto się przyjrzeć tej bibliotece bliżej.<br />
<br />
Linki:<br />
- <a href="http://code.google.com/p/elmah/">http://code.google.com/p/elmah/</a><br />
- <a href="http://www.asp.net/web-forms/overview/older-versions-getting-started/deploying-web-site-projects/logging-error-details-with-elmah-cs">http://www.asp.net/web-forms/overview/older-versions-getting-started/deploying-web-site-projects/logging-error-details-with-elmah-cs</a><br />
<br />
<pre class="code_block prettyprint prettyprinted"><span class="pun"> </span></pre>
zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-10237662348482680512016-03-20T09:03:00.001+01:002016-03-21T20:17:05.290+01:00konferencja meet.js summit (#meetjs16)O konferencji "Meet.js Summit 2016" dowiedziałem się dosyć niedawno, czyli na około tydź. przed konferencją. W tamtym czasie, biletów już nie było, jednak dzięki odrobinie szczęścia oraz życzliwości jednego z użytkowników portalu wykop.pl udało mi się zdobyć wejściówkę na tą konferencję <a href="http://www.wykop.pl/wpis/16989767/mirki-szybka-pilka-wejsciowka-na-meet-js-summit-na/59111637/#comment-59111637">(jednemu z uczestników coś wypadło i oddał wejściówkę, aby się nie zmarnowała)</a>. Tym oto zrządzeniem losu udało mi się pójść na tą, jakże wspaniałą konferencję, poświęconą językowi javasctipt.<br />
<br />
Najpierw pokrótce opiszę kilka prezentacji, na których byłem, a nast. kilka uwag ogólnych na temat konferencji.<br />
<br />
Katarzyna Jastrzębska - "Web projects with ClojureScript" -> Kasia pokazała nowy język, będący mieszanką Clojure oraz Javascriptu (te języki można mieszać ze sobą w składni, m.in. w taki sposób następuje odwołanie do obiektów drzewa DOM). Moje pierwsze wrażenie na temat ClojureScript jest takie, że nie zastosował bym go w moich, korporacyjnych projektach. Powodem jest zbyt słabo typowana składnia. Kasia jako przykład dynamiki języka, pokazała instrukcję "if", która nie jest wyrażeniem języka, a jedynie funkcją odpowiednio zmutowaną, aby pełniła taką rolę (sam język nie posiada instrukcji "if"). Jest przez to bardzo elastyczny. Niestety, ale w korporacjach utrzymanie istniejącego kodu trwa wiele lat, zespoły programistyczne zmieniają się często, a przez to miałem m.in. okazję utrzymywać kod jako piąty programista. Oczywiście każdy poprzednik miał swój sposób pisania kodu, swoje dobre praktyki oraz swoje niedbałości. Jak do tego dojdzie jeszcze pisanie "if-a" na 20 różnych sposobów, to w takim kodzie po kilku latach może być naprawdę niezły "mindfuck".<br />
Pozwólcie, że zacytuję <a href="http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered">klasyka</a>:<br />
<blockquote class="tr_bq">
<cite><a class="showTagSummary" data-hasqtip="0" href="http://www.wykop.pl/tag/define/">define</a> TRUE FALSE<br />
//Happy debugging suckers </cite></blockquote>
Jeżeli natomiast chodzi o uwagi do prelegenta, to miałbym 3 drobne uwagi:<br />
- więcej pewności siebie ;-)<br />
- na slajdach, które pokazują tą samą metodę w 2 językach jednak fajnie by było, gdyby ta metoda posiadała tą samą nazwę, oraz te same parametry<br />
- przy pokazywani praktycznych przykładów, dobrze jest wcześniej przygotować sobie snippety z kodem (wtedy wszystko odbywa się jakby płynniej)<br />
- ale ogólnie to pozytywna prezentacja<br />
- dziękuję za kubek scalaz ;-)<br />
<br />
Grzegorz Koronowski - "Angular & JS lessons learned" -> całkiem fajna prezentacja nt. praktycznych przykładów korzystania z angular.js. Osobiście nie korzystałem z angulara na produkcji, natomiast kolega, który siedział obok mnie, nad jednym z pokazywanych przykładów (nr. 2 lub nr. 3), spędził sporo czasu w pracy, a na koniec doszedł niezależnie do podobnych wniosków, co autor. Ja się zastanawiałem nad przykładem nr.4, tj. czy nie prościej było by zwobić zwykły "target _blank", ale później sobie pomyślałem, że autor zapewne do nowego okna chciał przekazywać stan aplikacji lub jej parametry w sposób "ukryty", oraz obudować tą logikę w jakiś sprytny mechanizm. Takie też później padło pytanie, a odpowiedź mniej więcej pokrywała się z moimi przypuszczeniami. Ogólnie fajna i na pewno przydatna prezentacja. Taka życia.<br />
Drobna uwaga do prelegenta: w wolnej chwili można ciut bardziej podszlifować język angielski. Jest dobrze, ale mogło by być jeszcze lepiej ;-)<br />
<br />
Łukasz Fiszer - "Npm scripts as an automated tool" -> fajny talk. Łukasz przedstawiał sposoby automatyzacji tasków, oraz sporo porównywał do obecnie stosowanych narzędzi, tj. gulp i grunt. Że często próbuje się z nich zrobić "szwajcarski scyzoryk" i stosować nawet w tych miejscach, w których nie powinno się tego robić. Łukasz wspomniał też o tym, że na rynku popularne są dwa narzędzia o niekompatybilnych ze sobą plikach wsadowych, dlatego on pokazuje trzecie rozwiązanie. Z drugiej strony, podczas swojej prezentacji był bardzo przekonujący.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://imgs.xkcd.com/comics/standards.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="181" src="https://imgs.xkcd.com/comics/standards.png" width="320" /></a></div>
<br />
Robert Kawecki - "Reliable Node.js application for a reactive world" -> dosyć dobra prezentacja o tym, co jest ostatnio "trendy" w świecie backendu, czyli CQRS + EventStore + DDD, na przykładzie konkretnego, działającego produktu, stworzonej przez stosunkowo młodą firmę. A to wszystko w świecie javascriptu. Jak ktoś chce poznać obecne trendy na konkretnym, działającym (i wdrożonym produkcyjnie) przykładzie, w dodatku przedstawioną w bardzo prostej i przystępnej formie, to koniecznie powinien obejrzeć tą prezentację. Po prostu SUPER!!!.<br />
<br />
Łukasz Korowicki - "Style Guide Driven Development - Episode IV - New Hope for Front-end" -> ta prezentacja, to taki przekrój przez dostępne obecnie na rynku sposoby tworzenia różnej maści "css-ów", czyli LESS, SASS. W sumie nie jestem grafikiem, więc się nie wypowiem nt. szczegółów.<br />
<br />
Adrian Makowski & Adam Chwitkowski - "Creating easy going code" -> bardzo fajna prezentacja. Oboje panowie wybrali po kilka prostych zasad, zarówno z front-endu, jak i back-endu, których przestrzeganie bardzo ułatwia życie. Z front-endu było m.in. oocss, bem, itcss, natomiast z back-endu były 2 literki z SOLID oraz "composition over inheritence" (interfejsy > dziedziczenie) wraz z praktycznymi przykładami "bad code vs good code" + tdd. Rady odnośnie backendu znałem od dawna, za to najwyższy czas, zainteresować się tym, co oznaczają wymienione skróty z frontendu. Bardzo fajna i przydatna prezentacja.<br />
<br />
Artur Szott - "React enlightenment - my 10 month Journey with React.js" -> z tego co pamiętam, to Artur pokazywał w swojej prezentacji, że sam React.js na początku może być nieco przytłaczający dla kogoś z zewnątrz, oraz pokazywał od czego można zacząć, czyli od ".jsx" natomiast testować z wykorzystaniem mocha i chai. Tak teraz sprawdzam i... nie mam więcej notatek na temat tej prezentacji, czyli raczej taki intro talk dla zupełnie początkujących w świecie react-a.<br />
<br />
Zbyszek Tenerowicz - "Gettin your Node.js app production redy" -> od jakiegoś czasu, bawię się w domu kursem Node.js z <a href="http://nodeschool.io/">nodeschool.io</a> i ten talk był idealnie adresowany do mnie, ponieważ autor wychodzi z założenie, że jego widownia tyle co skończyła kurs na nodeschool.io albo inny, czyli zna podst. node.js i chciała by zrobić krok dalej, czyli umieścić swoje rozwiązanie na produkcji. Zbyszek pokazuje zaróno narzędzia z jakimi poleca się zapoznać, tj. pm2 (process manager), podejścia programistyczne, jakie powinniśmy stosować w naszym node.js (aplikacja pomiędzy requestami http powinna być bezstanowa, ewentualnie kiedy już naprawdę jesteśmy zmuszeni utrzymywać stan pomiędzy requestami, to wtedy korzystamy z redis). Wszystko powinniśmy wykonywać asynchronicznie, polubić się z TypeScryptem, zapoznać się z poziomami logowania, podpiąć pod istniejące syst. monitorowania w firmie, o ile takie są (kiepski syst. monitorowania, na który ktoś patrzy full time, jest dużo lepszy niż dobry syst. monitorowania, na który sami będziemy patrzeli od czasu do czasu). Kolejne narzędzia / biblioteki, do monitorowania stanu aplikacji: Nsp chceck, node secure project, requireSafe (oraz komenda javascriptowa process.memoryUsage().rss wykonywana z wewnątrz naszego kodu). I na koniec linki, czyli absolutny "must watch", czyli <a href="http://techblog.netflix.com/2014/11/nodejs-in-flames.html">netflix -> nodejs-in-flames</a>, ponieważ lepiej wiedzieć co nas spotka w życiu wcześniej i od samego pocz. mieć przyg. plan naprawczy. Super talk. Jak dla osoby, która sama sobie po nocach koduje w node.js, a docelowo chcę zrobić jakiś własny "pet project", w którym node.js wykorzystam, to ten talk był dla mnie super.<br />
p.s. uwaga na wycieki pamięci, ponieważ node.js ma limit 1.5gb danych (jak proces node.js będzie zajmował więcej pamięci, to się wywali).<br />
<br />
Michał Załęcki - "Reactive JavaScript" -> ta prezentacja, to opis tego, czym są "reactive extensions", jaka była droga ewolucji w javascripcie, czyli callbacks -> promises -> asynnc/await -> react extensions (i dlaczego aktualnie warto stos. właśnie reactive extensions i w czym one są lepsze, np. dużo bardziej czytelna składnia niż async/await). Było też o zastosowaniu kilku wzorcach projektowych (m.in. obserwator), oraz programowania funkcyjnego w javascript. Całkiem przyjemny talk poglądowy, dlaczego warto korzystać z reactive extensions. Całkiem miło i przyjemnie spędzony czas.<br />
<br />
Z prelekcji, na których nie byłem, za to widzę wielkie ochy i achy na twitterze, to Staś Małolepszy - "The future od Javascript is now. How to make the most of it?". Jak tylko pojawią się nagrania z konferencji w necie (prelekcje były nagrywane), to chętnie ją sobie obejrzę.<br />
<br />
Uwagi ogólne do organizatorów? Super konferencja, dobra lokalizacja, wyżywienie, mega super prelekcje. Naprawdę mega konferencja. Czy czegoś mi brakowało albo co można by było zmienić? Brakowało mi dwóch rzeczy. W sumie pierdoły, ale mogę o nich wspomnieć:<br />
- osoby z dzwonkiem, która by przypominała, że właśnie rozpoczęła się prezentacja na jednej z sali. Na korytarzu zawsze było kilka osób, był szum, ciągle coś się działo, więc bardzo łatwo można było przegapić czas rozpoczęcia prezentacji, co skutkowało tym, że drzwi do sali były otwarte trochę dłużej niż powinny (nawet 10-15 min od rozpoczęcia prelekcji) i siedząc w ostatnich rzędach było słychać szum dochodzący z korytarza.<br />
- na jednej z konferencji zauważyłem fajny bajer, tj. 3 kolorowe karteczki (zielony, żółty, czerwony), które były dostępne podczas wychodzenia z prezentacji a wychodzący z prezentacji uczestnicy wrzucali je półmiska, dając tym samym łatwo widoczny "feedback".<br />
<br />
Ale tak to super. Mega konferencja i jestem bardzo zadowolony, że mogłem wziąć w niej udział. Jakościowo to stała MEGA, co zresztą widać w opisach konkretnych prezentacji. Zdecydowanie polecam.<br />
<br />
<br />
<br />zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com11tag:blogger.com,1999:blog-4921831409255737271.post-63633113257925845862016-03-17T20:50:00.002+01:002016-03-17T20:51:42.569+01:00Node.jsOst. czasy bardzo popularnym językiem jest javascript. Ten język istnieje od dosyć dawna, jednak przez wiele lat traktowny był "po macoszemu". Ost. kilka lat, to jednak zdecydowany "boom" na ten konkretny język. Ilość bibliotek i frameworków jaka powstaje jest wprost niesamowita.<br />
Javascript przez wiele lat kojarzony był głównie z frontendem, czyli tą częścią strony www, która wykonuje się bezpośrednio w przeglądarce internetowej. Teraz jednak javascript dorobił się porządnego rozwiązania serwerowego, zgodnie z ideologią "jeden język programowania - wszędzie". Typ rozwiązaniem serwerowym jest <a href="https://pl.wikipedia.org/wiki/Node.js">Node.js</a><br />
<br />
Krótki wpis, co to jest npm (node package manager), jak i samo nodejs można znaleźć na blogu Gutka <a href="http://blog.gutek.pl/2014/05/26/co-to-jest-npm/">link</a>, więc nie będę się tutaj powtarzał, szczególnie, że Gutek opisał to fajnie, zgrabnie itp (ohy i ahy).<br />
<br />
Ja z mojej strony polecił bym zacząć się z tym bawić, od robienia tutoriali z <a href="http://nodeschool.io/">nodeschool.io/</a>.Samemu skończyłem już część Core-ową i aktualnie robię wersję rozszerzoną i jak na razie mi się to podoba. A, że warto spróbować i dać nodejs szansę, to warto spojrzeć choćby na przykładowy serwer wystawiający json-y, jaki można postawić z wykorzystaniem biblioteki "express".<br />
<br />
<blockquote class="tr_bq">
var portNumber = process.argv[2];<br />
var url = require('url');<br />
var express = require('express');<br />
var app = express();<br />
<br />
app.get('/api/parsetime', function(req, res){<br />
var parsedUrl = url.parse(req.url, true);<br />
var date = new Date(parsedUrl.query.iso);<br />
<br />
res.json({ hour: date.getHours(), minute: date.getMinutes(), second: date.getSeconds() })<br />
});<br />
app.get('/api/unixtime', function(req, res){<br />
var parsedUrl = url.parse(req.url, true);<br />
var date = new Date(parsedUrl.query.iso);<br />
<br />
res.json({ unixtime: date.getTime() })<br />
});<br />
<br />
app.listen(portNumber);</blockquote>
<br />
Wygląda znajomo? <br />
Prawie, jak w we wspaniałym <a href="http://nancyfx.org/">nancyfx.org</a>.<br />
Dodatkowo, fajnie rzeczy można wyczarować operując na strumieniach danych (nieco inaczej się operuje niż w c#) oraz tworzyć z nich "wężyki" <a href="https://en.wikipedia.org/wiki/Method_chaining">Method chaining.</a><br />
<br />
Całkiem interesująca technologia. <br />
<table class="highlight tab-size js-file-line-container" data-tab-size="8"><tbody>
<tr><td class="blob-code blob-code-inner js-file-line" id="LC1"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC2"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC3"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC4"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC5"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC6"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC7"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC8"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC9"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC10"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC11"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC12"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC13"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC14"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC15"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC16"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC17"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC18"><br /></td>
<td class="blob-code blob-code-inner js-file-line" id="LC19"><br /></td></tr>
</tbody></table>
zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-69571710159513453612016-03-05T11:34:00.001+01:002016-03-05T11:48:30.926+01:00Powtórzenie z algorytmówJakiś czas temu, postanowiłem się doszkolić ze znajomości algorytmów. Częściowo było to spowodowane tym, że na studiach miałem dosyć okrojone algorytmy (mieliśmy różne sortowania, różne sposoby podziału, ale do grafów już nie doszliśmy) i o ile przez długi czas ta wiedza była wystarczająca, z czasem jednak <a href="https://codility.com/">codility</a> rosło w popularność. O ile obecnie swój "peak" zapewne ma już za sobą, to podczas przykładowej rozmowy kwalifikacyjnej lub zgłaszania swojego uczestnictwa do darmowego szkolenia lub hakatonu zawsze możemy zostać poproszeni o zakodowanie czegoś "na szybko".<br />
<br />
Ten temat miałem w tyle głowy jako "TODO" już od wiosny 2015r, jednak wziąłem się za niego dopiero jesienią 2015. Na pocz. sygnałem był temat z tagiem #zadaniaBartosza na popularnym portalu społecznościowym <a href="http://www.wykop.pl/">wykop.pl</a>. Jeden z użytkowników wziął przykładową książkę do algorytów i raz w tyg. publikował zadanie, które nast. pozostali użytkownicy rozwiązywali. Po kilku zadaniach użytkownikowi znudziła się cała zabawa, a i algorytmy jakie rozwiązywaliśmy pozostawiały nieco do życzenia. Ważne jest to, że dała mi impuls do tego, aby wreszcie wziąć się za ten temat.<br />
<br />
Nast. postanowiłem wziąć się za algorytmy sam. I wziąć się za nie w dwójnasób, tj. za pomocą strony z algorytmami jaką znałem, tj. <a href="https://projecteuler.net/">projecteuler.net</a> oraz kupując książkę teoretyczną. Przy wyborze książki swój wybór oparłem na tym opisie: <a href="http://4programmers.net/Algorytmy/Ksi%C4%85%C5%BCki_do_algorytmiki">książki do nauki algorytmów</a>, a ost. wybór padł na <a href="http://ksiegarnia.pwn.pl/Wprowadzenie-do-algorytmow,68706413,p.html">Wprowadzenie do algorytów</a>.<br />
<br />
Co mogę napisać o tych dwóch sposobach uczenia?<br />
- project Euler to już jest bardzo stara strona, która posiada multum zagadek (ponad 200), jednak wiele z nich to problemy czysto matematyczne. Zaletą natomiast jest to, że istnieje wiele gotowych rozwiązań, wraz z zwyjaśnieniami zadań, tzn. najpierw możemy sami spróbować, a później znaleźć lepsze rozwiązanie z wytłumaczeniem dlaczego tak, a nie inaczej <br />
- książka wyjaśnia pewne podstawy, wyjaśnia również coraz bardziej zaawansowane rzeczy, jednak jest strasznie duża (gruba) i pisana językiem matematycznym. Widać, że jest to podręcznik akademicki, co ma swoje zalety jak i wady.<br />
<br />
Jeżeli ktoś nie chce wydawać pieniędzy aby kupować książkę, to po wykonaniu danego zadania, polecam mu zajrzeć np. na <a href="http://www.mathblog.dk/project-euler-solutions/">http://www.mathblog.dk/project-euler-solutions/</a>, w którym autor dosyć dobrze opisuje dane zagadnienie, zarówno w kwestii podstaw teoretycznych, jak i dostarcza działający kod. Zazwyczaj dostarcza kilka rozwiązań, tłumaczy czym one się różnią oraz wyjaśnia brakujące podstawy teoretyczne. Polecam do nauki.<br />
<br />
Uczyłem się z tego, aż do pewnej rozmowy z <a href="http://www.mfranc.com/">Michał Franc</a>, która nieco odświeżyła moją wiedzę. Z tej rozmowy były dwa wnioski:<br />
- algorytmy to tylko jeden z bardzo wielu elementów wymaganych wobec programisty i wcale nie trzeba ich mieć obcykanych na tip top, aby móc powiedzieć o sobie, że jesteśmy "pro"<br />
- pokazał mi, że istnieje lepsza strona z zadaniami od projektu Euler, czyli <a href="https://leetcode.com/">https://leetcode.com/</a><br />
<br />
Ost. strona, tj. leetcode.com, mimo iż spędziłem przy niej najmniej czasu ze wszystkich wymienionych tutaj projektów, wydaje mi się obecnie najlepsza do nauki. Problemy wydają się bardziej życiowe, choć mogło to być spowodowane tym, że Eulera brałem "od początku", a LeetCode losowo ze środka, a dodatkowo dostajemy do tego masę testów jednostkowych, które podają nam wynik. To właśnie te jawne testy mają największą przewagę ze wszystkich wymienionych tutaj rozwiązań.<br />
Gdybym obecnie ponownie stawał do zadania "naucz się algorytmów" to uczył bym się ich z <a href="https://leetcode.com/">https://leetcode.com/</a><br />
<br />
Ciekawostki: <br />
- w trakcie pracy nad tym zadaniem, udało mi się też zostać kontrybutorem (współautorem) jednego z zadań w projekcie <a href="http://rosettacode.org/">rosettacode.org</a>, a dokładniej wersji C# problemu sumy największej ścieżki wewnątrz trójkąta <a href="http://rosettacode.org/wiki/Maximum_triangle_path_sum#C.23">Maximum_triangle_path_sum#C.23</a><br />
- niektóre z rozwiązanych przezemnie zadań umieściłem na <a href="https://github.com/zchpit?tab=repositories">githubie</a>. Wyjątkiem jest "leetcode", który posiada własny system pamiętania rozwiązań. zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-72241347186957110252016-01-30T20:32:00.001+01:002016-01-30T20:37:34.100+01:00Programowanie funkcyjne z wykorzystaniem języka F#Pierwszy raz styczność z językiem F# miałem około półtora roku temu, kiedy to <a href="http://mlusiak.com/2014/07/22/fsharp-warsaw-dotnet-usergroup/">Michał Łusiak zaprezentował nam ten język podczas spotkania WG.NET.</a> To był mój pierwszy kontakt z tym językiem. Pewne elementy wydawały się być całkiem fajne, inne nieco dziwne, ale ogólne wrażenie nt. tego języka jakie odniosłem po tej prezentacji było takie, że Microsoft traktuje ten język jako swego rodzaju "piaskownicę" oraz "miejsce treningowe" podczas wprowadzania rozszerzeń do języka C#. Że to jednak C# ma pozostać głównym językiem, bądź co bądź korporacyjnej platformy, natomiast F# to ma być takie laboratorium stworzone dla tzw. "szalonych naukowców" oraz innych eksperymentatorów, którzy będą tworzyć nowe rozszerzenia języka oraz platformy. Jeżeli stworzą coś nowego i uda im się to skompilować do MSIL, a przy okazji nic nie wybuchnie, to wtedy wszelkie nowości będzie można zaadaptować do C#.<br />
<br />
W międzyczasie, możliwe że nawet wcześniej, podczas jednego ze szkoleń nt. C# prowadzonego przez Comarch, autor szkolenia wyjawił, że osobiście jest fanem języków funkcyjnych, oraz że obecnie, bardzo dużo, albo niemal wszystko co znamy z języków funkcyjnych da się zrobić w Linq, tyle tylko, że zapis jest wtedy nieco dłuższy i bardziej pokręcony.<br />
<br />
Wracając jednak do właściwego F#, kolejnym takim momentem, przemawiającym na jego korzyść był fakt, iż podczas konferencji <a href="http://wrocsharp.com/">Wroc# 2015</a> ten język, obok Angular.JS dostał jedną z sesji prezentacyjnych (wszystkich sesji było 6). To oznaczało, że coś się dzieje.<br />
<br />
Prawdziwym przełomem w moim postrzeganiu tego języka, była jednak konferencja <a href="http://www.devday.pl/">devday 2015</a>, podczas której nie tylko były sesje z jezyka F#, a na korytarzach można było osobiście porozmawiać z samym <a href="http://tomasp.net/">Tomasem Petrickiem</a>, który nomenomen zrobił z jednego z niewielu dostepnych stolików swoisty "F# Corner" ;-) Prawdziwym przełomowym momentem, to był fragment prezentacji Chada Fawlera, która stanowiła keynote tej konferencji:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/CkfjCef-iYI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/CkfjCef-iYI?feature=player_embedded" width="320"></iframe></div>
<br />
Chad mówi tam m.in., aby w obecnych czasach zainteresować się 3 tematami:<br />
- linux (z którego aktualnie tworze tego posta)<br />
- mobile development (jesienią tego roku przerobiłem kurs na courserze z programowania na platformę Android)<br />
- programowanie funkcyjne, o którym tutaj właśnie się rozpisuje.<br />
<br />
Więc czym tak naprawdę jest język F# i jak się do niego zabrałem?<br />
F# jest to język o funkcyjnym paradygmacie programowania, w odróżnieniu np. od C#, Javy, Pythona lub C++, które są językami o obiektowym paradygmacie programowania. F# jest też integralnym językiem platformy .NET, co oznacza, że jego kod źródłowy kompilowany jest do języka MSIL, a dopiero później przerabiany na kod maszynowy. Język ten ma też kilka innych ciekawostek, które postaram się wylistować:<br />
<ul>
<li>język funkcyjny (funkcyjny paradygmat programowania)</li>
<li>język kodu pośredniego platformy .NET</li>
<li>dopuszcza mix z kodem źródłowym innego języka .NET (przez co dopuszczalne jest korzystanie z bibliotek standardowych platformy .NET lub tworzenie projketów będących swoistymi mieszańcami C# oraz F#).</li>
<li>brak dynamicznego mapowania typów, co czasami bywa irytujące</li>
<li>wszystkie zmienne z definicji są stałe i niezmienne, ale możliwe jest tworzenie klasycznych zmiennych (poprzed dodanie słowa kluczowego "mutable"). Ma to na celu tworzenie ułatwienie rozwiązań pracujących w trybie zrównoleglonym (wielowątkowym)</li>
<li>"model aktorów", zwany tutaj "mailbox agent", znany m.in. z biblioteki "Akka" oraz "Akka.net" jest tutaj wbudowany jako naturalny element składowy jezyka </li>
<li>open source - język jest w pełni otwarty i oficjalnie tworzony przez społeczność, choć część jego twórców dostaje za pracę nad projektem wypłatę z Microsoftu</li>
<li>hierarchia plików w solucji ma znaczenie (w odróżnieniu np. od C#, gdzie nie ma to znaczenia)</li>
</ul>
To co wypunktowałem, to są główne, charakterystyczne cechy tego języka, ale co one oznaczają w praktyce? Czym np. jest ten funkcyjny paradygmat programowania?<br />
Funkcyjny paradygmat programowania, to w porównaniu do obiektowego paradygmatu programowania nieco inne spojrzenie na te same problemy.<br />
W przypadku programowania obiektowego, tworzymy klasy, jako definicję obiektów, w oparciu o które tworzymy obiekty. W tych obiektach "zamykamy" pewne dane, a nast. wykonujemy na nich pewne obiczenia. Mamy więc zbiory obiektów, każdy z nich wewnątrz ma swoje specyficzne dane, na których wykonuje obliczenia, często w sposób mniej lub bardziej tajny (tzw. enkapsulacja), a nast. operujemy na danych wynikowych wychodzących z tych obiektów.<br />
W przypadku programowania funkcyjnego mamy do czynienia z innym podejściem. Tutaj nie mamy typowych klas przedstawiających obiekty. Mamy za to funkcje, które przyjmują pewne wartości i które zwracają wyniki. Do tego mamy kilka typów kolekcji i... operujemy na danych z tych kolekcji za pomocą tworzonych funkcji. Jeżeli trzeba, to w naszych funkcjach, wykorzystujemy inne funkcje, w których możemy wykorzystywać kolejne funkcje itd. Oczywiście istnieje kilka typów kolekcji, różniących się od siebie właściwościami (np. sekwencje z definicji obsługują "lazy loading", natomiast Sety bazują na drzewie binarnym), jak i kilka typów kluczowych (np. rec sprawiających, że dana funkcja jest funkcją rekurencyjną).<br />
<br />
Skąd czerpałem wiedzę?<br />
Postanowiłem połączyć teorię z praktyką czyli:<br />
<ul>
<li>Jako teorię czytałem książkę "F# for Quantitative Finance (Johan Astborg)", która ma raczej średnie opinie w necie, ale z uwagi, że wpadła w moje ręce za darmo podczas jednej z promocji na "Pact Publishing" to postanowiłem ja przeczytać i czegoś się z niej nauczyć.</li>
<li>Jako praktykę, postanowiłem wykonać przynajmniej 10 zadań z <a href="https://projecteuler.net/">Project Euler</a>. Jak mi poszło, można sprawdzić na <a href="https://github.com/zchpit/ProjectEuler/tree/master/F%23">w odp. projekcie, na moim koncie na githubie.</a></li>
<li>Połączenie jednego z drugim, czyli forum <a href="http://stackoverflow.com/questions/tagged/f%23">stackoverflow</a> </li>
</ul>
<br />
Po tym nieco przydługim wstępnie, teraz czas na to, co tygryski lubią najbardziej, czyli konkluzje, czyli wnioski.<br />
<ul>
<li>czytając opis języka w książce myślałem sobie, niby spoko</li>
<li>do czasu, aż zacząłem to programować samemu, wtedy co rusz napotykałem na dziwne błędy oraz zmuszenie mnie do zmiany sposobu myślenia</li>
<li>o ile pierwsze zadania z projektu euler były stosunkowo proste (przydała się praktyka w stos. linq oraz przykłady z książki, to im dalej w las tym trudniej)</li>
<li>sporo problemów i frustracji, szczególnie podczas pracy z pętlami przytrafił mi typ danych unit. Ponieważ jest on bardzo podobny do uint, na początku te typy mi się myliły, szczególnie, że F# nie pozwala na dynamiczną zmianę typów. Tworzyłem więc pętle, które z jakiegoś powodu w którymś momencie zwracały unit (brak wartości), natomiast mi się wydawało, że wraz z którąć iterecją, z nieznanego mi powodu zwracają one typ uint i mam problem z mapowaniem i porównywaniem typów. </li>
<li>pętle w F# nie są typowymi "pętlami" tylko "wyrażeniami" lub "wyrażeniami wyższego rzędu", co oznacza, że nie posiadają typowego "break-a". Nie możemy w dowolnym momencie, ot tak sobie wyjść z pętli przerywając jej działanie, tylko musimy ją ładnie "zamknąć", tudzieź pozwolić aby wszystko się wykonało tak jak należy</li>
<li>sposobem, aby pętle nie trwały nieskończenie wiele, albo nie robiły zbyt dużo "pustych przelotów", jest zastosowanie sekwencji z ich "lazy loading", oraz słowa kluczowego "yield". Bardzo ładnie obrazuje to przykład rozwiązania problemu nr.9 <a href="https://github.com/zchpit/ProjectEuler/blob/master/F%23/ProjectEulerInF%23/ProjectEulerInF%23/Problem9.fs">https://github.com/zchpit/ProjectEuler/blob/master/F%23/ProjectEulerInF%23/ProjectEulerInF%23/Problem9.fs</a></li>
<li>kod napisany w F# zazwyczaj jest krótszy i bardziej "elegancki" niż w porównaniu do tradycjnej wersji C# </li>
<li>kod przynajmniej w teorii dużo łatwiej powinno się dać skalować (wielowątkowość)</li>
<li>choć nie wiem, jak wygląda kwestia jego wydajności względem C#</li>
<li>Chad Fowler zachęcał do nauki języków funkcyjnych, widząc w tym przyszłość</li>
<li>jednak ilość obecnych ogłoszeń o pracę na popularnych portalach z pracą (w PL) na chwilę obecną jakoś specjalnie do tego nie zachęca</li>
<li> rozmawiając nt. temat z managerem jednej z firm deweloperskich, usłyszałem odp., że na razie to jest raczej nowość i nie ma na rynku zbyt dużo os., więc ewentualna zasępowalność jest niewielka i co za tym idzie na chwilę obecna bardziej ceniona jest dla nich chęć uniknięcia tzw. <a href="https://en.wikipedia.org/wiki/Bus_factor">"Bus factor"</a> niż "innowacyjność".</li>
<li>z drugiej strony, to natywne wsparcie dla programowania rozproszonego oraz wielowątkowego kusi, oj kusi :D</li>
</ul>
<br />
Reasumując, temat warty uwagi śledzenia. O ile obecnie jest zauważalny "hype" na konferencjach oraz grupach programistycznych, jednak jak na razie nie przekłada się to na ilość ofert pracy dla ludzi umiejących F#. W sumie najbardziej popularnym obecnie jezykiem funkcyjnym jest w polsce Scala, jednak tak naprawdę, ten język to takie "niewiadomo co", a z całą pewnością nie można go nazwać językiem typowo funkcyjnym. Z drugiej strony, od czasu rozpropagowania modelu aktorów do języków obiektowych, częściowo otwarta została pewna "nisza" wykorzystywana wcześniej jedynie przez języki funkcyjne.<br />
<br />
Jak to się wszystko potoczy? Myślę, że bardzo dużo zależy od tego, czy będą się pojawiały ogłoszenia o pracę w tym konkretnym języku, zarówno pod względem ich ilości jak i jakości. W każdym bądź razie zamierzam temat bacznie obserwować, przynajmniej jeszcze przez jakiś czas :-)<br />
<br />
<br />zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-84136911124314495722016-01-01T20:04:00.001+01:002016-01-01T21:58:29.090+01:00e-learning, pluralsight.com vs coursera.orgW tym wpisie postaram się opisać moje przemyślenia, nt. dwóch platform elearningowych, z których miałem okazję korzystać ost. jesieni.<br />
<br />
Pierwszą platformą, z której skorzystałem jest to <a href="http://www.pluralsight.com/">pluralsight.com</a>.<br />
Platforma dostarcza dwie opcje dostępu, tj. "standard" ograniczoną do oglądania filmów video, oraz "plus", w którórej dostępne są również ćwiczenia, sprawdzenia wiedzy oraz certyfikaty.<br />
<br />
Standardowo, każdy może skorzystać z "free trail", dzięki któremu, możemy skorzystać z 10dni/200min darmowego dostępu. Dzięki uprzejmości <a href="https://www.linkedin.com/in/pawel-klimczyk-5334184">Pawła Klimczyka</a> miałem dostęp miesięczny dostęp do platformy za pomocą kodu promocyjnego.<br />
<br />
Podczas mojej obecności na platformie, korzystałem z dostępu standard i obejrzałem dwa materiały szkoleniowe, jeden związany z Angular.js, oraz drugi, z językiem Scala. To na co zwróciłem uwagę, to spora ilość materiałów szkoleniowych, oraz wysoki poziom prezentowanych materiałów. Podczas kursu angular.js autor wykorzystywał <a href="http://plnkr.co/">plunkera</a>, natomiast w prezentacji nt. języka scala autor pierwsze co zrobił, to postawił sobie środowisko z automatycznym testowaniem testów jednostkowych podczas pisania kodu oprogramowania. W środkowisku .net za podobną funkcjonalność odpowiada płatny plug-in do VS o nazwie <a href="http://www.ncrunch.net/">NCrunch</a>.<br />
<br />
Kursy mi się podobały, można się było sporo nauczyć od profesionalistów, jednak wesja standard to jest jednak zdecydowanie za mało. Cały materiał pojedyńczego kursu podzielony jest na kilka półgodzinnych części. Nie wiem jak inni, ale u mnie, podczas oglądania półgodzinnego materiału z czasem spadało skupienie. Samo oglądanie, to jednak za mało. Zapewne dużo lepiej sprawdziła by sie wersja "plus", w której jest więcej ćwiczeń do samodzielnego opracowania tematu.<br />
<br />
Warto też wspomnieć, że plularsight się rozwija i zakupił inne, podobne serwisy, takie jak np. <a href="https://www.codeschool.com/">codeschool.com</a> ,który bardzo polubiłem swego czasu, jednak w momencie, kiedy testowałem ten serwis, to konta oraz płatności pomiędzy tymi serwisami nie były zintegrowane.<br />
<br />
<br />
Drugą platformą do elearningu, którą miałem okazję ost. przetestować jest <a href="https://www.coursera.org/">www.coursera.org</a>.<br />
Coursera, to platforma oparta o uczelnie wyższe, tj. renomowane uczelnie na codzień zajmujące się kształceniem studentów. Warto wspomnieć, ze w projekcie coursery można znaleźć takie uczelnie jak m.in. słynne <a href="https://pl.wikipedia.org/wiki/Massachusetts_Institute_of_Technology">MIT</a>.<br />
Coursera oferuje ścieżki nauki, w których znajdują się kursy, z różnymi dziedzinami danego zagadnienia prowadzone przez różne uczelnie. Każdy kurs składa się z 4 tygodni nauki. W każdym tyg. mamy część video z teorią, test wiedzy oraz kilka zadań praktycznych, które musimy wykonać samodzielnie, a nast. przesłać na uczelnię. Na każdym tyg. mamy deadline, w którym musimy się zmieścić z wykonaniem swoich zadań. Deadliny są dwa. Jeżeli wyrobimy się w pierwszym to ok, jeżeli jednak się z nim nie wyrobimy, to za każdy dzień zwłoki tracimy 5% punktów za odp. Nieryrobienie się w drugim deadline oznacza niezaliczenie zadania. W wersji płatnej możliwe są oficjalne certyfikaty wydawane przez uczelnie.<br />
<br />
W moim przypadku był to kurs programowania urządzeń mobilnych w języku java na platformę Andrid prowadzony przez <span class="c-dashboard-course-university-name"><a href="http://www.umd.edu/">University of Maryland, College Park</a>. To co warte jest wspomnienia, to fakt, że podczas oglądania materiałow wideo, średnio co 3-5 min. była pauza z 1-3 pytań nt. omawianego materiału (pomaga w skupieniu się na omawianym materiale), oraz fakt, iż prowadzący od samego początku pokazuje, w których miejscach należy szukać informacji (linki do dokumentacji platformy, lokalnych grup użytkoników, forum <a href="http://stackoverflow.com/">stackoverflow.com</a>, itp.). </span><br />
<span class="c-dashboard-course-university-name">Bardzo fajny sposób nauki, który wymaga od ucznia, zarówno poznania teorii, samodzielnej pracy z kodem, jak i pracy na dokumentacji.</span><br />
<span class="c-dashboard-course-university-name">Główną wadą, jaką zauważyłem odnośnie coursery jest stosunkowo mała ilość dostępnych kursów / ścieżek. Np. szukałem ścieżki z programowania funkcyjnego i niestety niemogłem nic znaleźć.</span><br />
<span class="c-dashboard-course-university-name"><br /></span>
<span class="c-dashboard-course-university-name"><br /></span>
<span class="c-dashboard-course-university-name">Podsumowanie:</span><br />
<span class="c-dashboard-course-university-name">Obie platformy są bardzo fajne. </span><br />
<span class="c-dashboard-course-university-name">W plularsight podobała mi się ilość dostępnych materiałów oraz profesionalne podejście prowadzących. Widać, że mamy do czynienia z zawodowcami, którzy od samego początku uczą "dobrych praktyk". Główną wadą tej wersji, z której korzystałem była zaby mała interakcja pomiędzy prowadzącym a prowadzonym. W wersji standard brakowało tego "learn by doing". Możliwe, że w wersji "plus" te mankamenty zostały poprawione, jednak nie wiem czy stoją ona na tak wysokim poziomie, jak w courserze.</span><br />
<span class="c-dashboard-course-university-name"><br /></span>
<span class="c-dashboard-course-university-name">W courserze podobało mi się połączenie wykładów (materiały wideo), pracy na dokumentacji (testy na zaliczenie) oraz prac domowych z kodem (przygotowane wcześniej aplikacje, które trzeba nieco przerobić, aby zaczęły pracować tak jak chcemy). Główną wadą coursery jest dostępna ilość materiałów, oraz ich aktualność. Kurs, który ja przechodziłem miał już dobre 1.5 roku, więc zdąćył się już nieco zestarzeć poprawny kod programu działał tylko na emulatorach (maszynach wirtualnych) tylko niektórych androidów.</span><br />
<span class="c-dashboard-course-university-name"><br /></span>
Co bym polecił?<br />
Gdybym samemu miał wydawać własne pieniądze, to:<br />
a) jeżeli ktoś nie ma żadnego doświadczenia, lub jest dopiero początkujący w jakiejś technologii, to dla takiej osoby polecił bym zacząć od wykonania pełnej ścieżki (6 kursów) na courserze. Zostanie ładnie oprowadzony po danej technologii, pozna jej różne aspekty, dzięki czemu będzie posiadał solidne podstawy.<br />
<br />
b) jeżeli jednak ktoś ma podstawy i miał już okazję pracować w danej technologii, a chciałby jedynie podnieść swój poziom, tudzież się "doszkolić" w najnowszych trendach, to dla takich osób polecił bym plularsight.zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com2tag:blogger.com,1999:blog-4921831409255737271.post-77139634345278993012015-10-04T16:21:00.003+02:002015-10-24T20:23:52.024+02:00Plunker - web edytor on-linePluner, czyli <a href="http://plnkr.co/">http://plnkr.co/</a> to darmowy, kompletny edytor html/css/javascript on-line, w którym możemy stworzyć strony www, w oparciu o wyżej wymienione technologie (i ich pochodne), możemy zapisać nasze prace, połączyć się z <a href="https://github.com/">https://github.com/</a> oraz wykorzystać nasze konto.<br />
<br />
Całkiem fajne i sensowne narzędzie, do tworzenia prototypów, dzielenia się swoją pracą w zdalnym zespole, lub np. z ludźmi ze <a href="http://stackoverflow.com/">stackoverflow.com</a> (w przypadku napotkania jakiś problemów).<br />
<br />
<br />
Edit: UWAGA!!! Na chwilę obecną nie ma bezpośredniej synchronizacji pomiędzy plunkerem, a githubem :( http://stackoverflow.com/questions/19615717/can-plunker-save-to-github zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-62656085392665441282015-09-19T16:26:00.001+02:002015-09-19T16:28:28.177+02:00Konferencja DevDay 2015W środowisku istnieje dobry zwyczaj, dawania "feedbacku", odnośnie wydarzeń, w których się wzięło udział. Feedback potrzebny jest organizatorom, prelegentom, aby wiedzieć, co ewentualnie poprawić, ale również i osobom postronnym zainteresowanym wybraniem się na podobny event w przyszłym roku, aby wiedzieć, czego mniej więcej można się spodziewać.<br />
<br />
W związku z tym, postanowiłem po krótce opisać moje wrażenia z konferencji <a href="http://devday.pl/">devday 2015</a>. W tym roku, konferencja była płata, jednak istniała spora pula darmowych, biletów, które można było wygrać w różnych konkursach. Mi udało się wygrać bilet w konkursie organizowanym przez <a href="http://wroc/#">wroc#</a> (i w związku z tym, z własnej inicjatywy pierwszego dnia konferencji chodziłem w "ich" koszulce, robiąc za żywą reklamę ;-)).<br />
<br />
Konferenacja, jak zwykle bardzo udana. Konferencja twała 2 dni i podobnie jak rok temu, odbyła się w centrum dydaktycznym wydziału medycznego Uniwersytety Jagielońskiego. Większość prezentacji odbywało się w dwóch salach obok siebie, które dla spotkań otwierających oraz zamykających każdego dnia były łączone w jedną dużą salę wykładową. Z tego co wspominali organizatorzy, wszystkie sesje były nagrywane, więc jak ktoś przegapił coś interesującego, to w przyszłości będzie mógł sobie obejrzeć interesujące go sesje na youtubie.<br />
<br />
Pod względem tematycznym rozrzut był całkiem spory, a prezentacje stały na mocno nierównym poziomie. Zdarzały się zarówno takie mega profesionalne, po których szczena opadała i chciało by się słuchać gościa jeszcze i jeszcze, a były też takie, na których zastanawiałem się "co ja tu robię" :/ Odniosłem też wrażenie, że przerwy między sesjami mogłby by być nieco krótsze, a dzięki temu prezentacje ciut dłuższe (np. o 5 min.).<br />
<br />
Kolejnym miłym dla mnie zaskoczeniem był fakt, że powoli zaczynam być znany i rozpoznawany "wewnątrz" ;-) Zdarzyło się kilka syt., że ktoś do mnie podszedł i mówi "my się chyba znamy". Czasem było to z którejś z poprzednich konferencji, czasem z <a href="http://www.wg.net.pl/">wg.net</a>, a czasem z działalności z grupy <a href="https://www.facebook.com/groups/net.developers.poland/?fref=ts">net.developers.poland</a> .Nie ukrywam, że bardzo miło było chwilę z wami porozmawiać :)<br />
<br />
Zanim napiszę po kilka zdań, odnośnie różnych sesji, to zdecydowanie dwie zasługują na pochwałę: Chris Heilmann "Qou vadis, JavaScript" oraz Chad Fowler "From Homogeneous Monolith to Radically Heterogeous Microservices: The Wunderlist 3 story". Zdecydowanie najbardziej interesujące sesje tej konferencji.<br />
<br />
Chad Fowler - "The passionate programmer 10 years later" - Ogólnie całkiem fajna i przyjemna sesja nt. podróży, jaką jest życie developera. Chad mówił o tym, że wiele się w życiu zmienia, że często dostawa rolę, lub pisał książkę o czym, na czym nie do końca się znał, ale taką miał rolę, więc ją wykonywał, a później jego praca i przemyślenia stawały się bestsellerami. Wspominał też o potrzebie znalezienia mentora, który pchnie nas ostro do przodu w naszym rozwoju, oraz o potrzebie bycia mentorem. Ogólnie spoko, jednak na samym pocz. nieco za bardzo przynudzał nt. swojej biografi ;-)<br />
<br />
Oliver Sturm - "Creepy C#" - Sesja nt. błędów w kodzie. Oliver pokazał kilka przykładów złego kodu, który znalazł kiedyś na produkcji. Sesja miała wyraz humorystyczny (i z tego powodu podobała się kilku os., z którymi rozmawiałem), jednak dla mnie, przedstawione przykłady były zbyt banalne. Dla kogoś, kto wcześniej przerobił książki0 "Ucle Bob" Martina nt. jakości kodu źródłowego oraz na co dzień posługuje się R# te przykłady były zbyt banalne. Sorry, ale odniosłem wrażenie, że tracę czas.<br />
<br />
Scoot Allen - "Introduction to Aurelia" - Scoot pokazał w swojej sesji to, można się dowiedzieć wchodząc na stronę i robiąc typowy tutorial. W zasadzie, cała ta sesja to było robienie tuoriala z komentarzem. Problem z tą sesją był taki, że na sam koniec, gdy padło pytanie: "w czym Aurelia jest lepsze od Angular.js"? to Scoot, który jest jedną z os. pracujących nad tym projektem, do końca nie umiał odpowiedzieć. Skoro "insider" sam nie wie, w czym jego produkt jest lepszy od głównego konkurenta, albo na czym będzie polegała główna różnica to poszę Cie, ale... nie. <br />
<br />
Shay Friedman - "The wonderful world that is twitter bootstrap" - Kolejny, po Aurelii tutorial jednej z technologii. O termin bootstrapa obił mi się kiedyś o uszy, o tyle dla wielu os. na konferencji to był chleb powszedni. Mi osobiście się podobało i zamierzam pochodzić po stronie projektu i gdzieś to zastosować, o tyle wiem, że wiele os. miało z tą sesją problem taki, że technologia jest już na rynku 2-3 lata, wiele os. z niej korzysta, przyjeżdża gość na konferencje, to myśleli, że pokaże jakieś "tips & tricks", a nie tutoriala od zera do poczatkującego.<br />
<br />
Rob Connery - Hard Lessons Learned: Why rethinkdb 2.0 is worth a look - Sesja nt. kolejnej bazy typu NoSQL, przeznaczonej do użytku w trybie on-line z nużym naciskiem położonym na skalowalność. Typowa baza, dla rodzącego się start-upu, opartej o wymianę danych on-line na wielu urządzeniach (synchronizacja). Unikalną umiejętnością tej bazy, jest łatwa replikowalność oraz skalowalność, czyli "rozdwajanie". Pojedyńczy przycisk myszy i z 1 bazy masz dwie (posiadające te same dane i wewnętrznie synchronizowalne).<br />
Zapytania pisze się w języku funkcyjnym. Jak ktoś robi startup z dostępem on-line dostępny na kilku różnych urządzeniach jednocześnie to powienien się zainteresować tematem.<br />
<br />
Manimaran Chandrasekaran - Buildin cloud scale enviroment with octopus deploy and powershell dsc - Temat wydawał mi się interesujący, szczególnie z uwagi na myśl o poznaniu i zrozumieniu octopus deploy oraz poznanie opinii na jego temat przez praktyka. Niestety poziom prowadzenia samej prezentacji, był na dosyć niskim poziomie. Już pal licho "angielskawy" prowadzącego, ale sam sposób prowadzenia, dobór materiałów, itp. pozostawiał jednak zbyt wiele do życzenia. Przychylam się do zdania, które uslyszałem w kuluarach: "autor powinien wziąć kamerę i spróbować poprowadzić swoją prezentację kilka razy na sucho, a nast. się obejrzeć". Wszystkim nam, wyszło by to na zdrowie.<br />
<br />
Steve Freeman - Rediscovering the command line, or Your Data isn't that Big - Co mogę powiedzieć o tej prezentacji? Że sposób prowadzenia był "usypiający"? Że nie do końca mnie to kręciło? Że temat może i interesujący, jednak po obejrzeniu prezentacji doszedłem do wniosku, że gdzies sobie to zapiszę w głowie, że takie coś istnieje być może wrócę do tego kiedyś później. Temat chyba jednak bardziej na jakiś blog post, niż na masową konferencję.<br />
<br />
Will Evans - Heretics, High priests, and Hegiolatry - są dwa dni po konferencji, a ja nawet za bardzo nie mogę sobie przypomnieć, o czym była ta prezentacja. Serio. Widocznie nic bardzo ważnego, albo coś, czego mój mózg nie był w stanie jakoś sensownie strawić. Nic dziwnego, że wyszedłem na 5-10 min przed końcem.<br />
<br />
Chris Heilman - Qou vadis, javascript - Chrisa pamiętam jeszcze z Wroc#, jako gościa z Mozilli, który zatrudnił się w Microsofcie w celu zniszczenia Internet Explorer "od środka". Chris opowiadał o javascripcie, o jego zaletach, wadach, wizjach rozwoju i towarzyszącym temu problemach bez żadnych ogródek, ani tematów tabu. Jako, że .js jest obecnie mega gorącym zagadnieniem, warto było posłuchać naprawdę kumatego gościa, siedzącego w temacie po uszy, który mówił "jak jest" i jak to widzą, zarówno twórcy języka, jak i twórcy przeglądarek.<br />
<br />
S.Belczyk, M.Łusiak, S.Elamin - "Lighting talks" - kilka, krótkich, 10-15 min "lighting talków". Taki miły i całkiem sympatyczny przerywnik, między większymi prezentacjami. Michał opowiadał tym, jak został prelegentem, Sam o tym, jak robili aplikacje dla jednej z konferencji i spieprzyli sprawę, a mimo tego, im zapłacili, natomiast Sebastian opowiadał o projektach naukowych (sondy kosmiczne, wielki zderzacz hadronów), które trwaja wiele lat, kosztują miliardy, a mają tylko jeden, decydujący releasee, a mimo to, udaje im się osiągnąć sukces.<br />
<br />
Gary Short - Walkthrough of a European space data agency science - całkiem fajna prezentacja, nt. tego, w jaki sposób za pomocą komputerowej analizy zdjęć satelitarnych (ew. zdjęć lotniczych) wskazać miejsca, gdzie rosną wybrane rośliny, policzyć ich ilość a nawet, zbadać stan ich zdrowia (wskazać miejsca, w których wegetacja roślin danego typu przebiega w spos. niestandardowy). Jako ciekawostkę, autor pokazywał kody źródłowe, oraz prowadził prezentację w sposób taki, jak należy. Dobra robota.<br />
<br />
Chad Fowler "From Homogeneous Monolith to Radically Heterogeous Microservices: The Wunderlist 3 story" - przed prezentacją, wiele os. bało się kolejnego "tutoriala dla początkujących", a w praktyce dostaliśmy coś 100 razy lepszego. Chad opowiadał, jak pewnego dnia rzucił dobrze płatną pracę na kierowniczym stanowisku w jednej z korpo w stanach, aby zostać CTO w jednym ze starupów w Berlinie, który robił "TODO list", czyli taki odpowiednik "Hello world". Opowiadał o problemach, jakie zastał jego zespół podczas pierwszego realesee ich monolitycznej aplikacji napisanej w Ruby (48h przycięcie łącza) oraz o podjęciu decyzji, o zmianie strategii. O wprowadzeniu mikroserwisów, o daniu bardzo dużej dowolności programistom w doborze technologii, o rozmowach z inwestorami, lub wewnętrznych rozmowach w dziale. Pokazywał też architekturę i o niej opowiadał. Dużo, konkretnego "mięcha". Wszystko od strony "praktycznej", żadnego zbędnego, pieprzenia ;-) Mega pozytyw.<br />
<br />
Rob Conery - Document storage techniques with PostgreSql and JSONB - Ten sam Rob, który dzień wcześniej opowiadał o RethinkDb, nast. dnia wspominał o zaletach tradycyjnej, relacyjnej bazy danych oraz o rozszerzeniu, którym do niej napisał, dzięki któremu, z PostgreSql można zrobić bazę dokumentów i składować w niej dokumenty, niczym w bazie NoSQL. Pokazywał też te same, lekko skomplikowane zapytanie, które zrobił dzień wcześniej na bazie RethinkDb, i że w zasadzie, jak ktoś chce, to można to sprowadzić jedynie do różnicy w składni. Na pytania o różnice, między bazami, odpowiedział, że PostgreSql lepiej poradzi sobie ze statycznym wyciąganiem danych (mamy np. milion rekordów i piszemy select i wystarczy jedna maszyna), za to RethinkDb jest łatwiej skalowalny i lepiej poradzi sobie pod dużym obciążeniem z www w syt. gdy trzeba będzie postawić 20-40 maszyn. Po za tym, PostgreSql, w odróżnieniu od niektórych dokumentowych baz dancyh, nie gubi danych <lol> :D<br />
<br />
Nat Pryce - Metaphors we code by - taki "lekki" temat na sam koniec, o różnicach jeżykowych oraz "kulturowych", które wpływają na to, w jaki sposób myślimy oraz się ze sobą porozumiewamy. Taka lekka gatka o wszystkim i o niczym. <br />
<br />
Uwaga: Podczas konferencji, było co najmniej kilka sesji poświęconych F#, jednak osobiście na żadną z nich sie nie wybrałem, więc ich tutaj nie opisuję.<br />
<br />
<br />zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com0tag:blogger.com,1999:blog-4921831409255737271.post-45063804827403874002015-09-02T21:23:00.002+02:002015-09-02T21:24:29.829+02:00syncfusion ebooksTen wpis będzie krótki, ponieważ postanowiłem podzielić się z wami radosną informacją o pewnym darmowych i całkiem interesującym źródle wiedzy. Tym źródłem jest firma www.syncfusion.com ,która za darmo, postanowiła wydawać e-booki edukacyjne na tematy technologiczne. Jak czytamy we wstępnie, firma zdaje sobie sprawę, jak ważne w świecie IT jest zawsze pozostawać na bieżąco z najnowszymi technologiami, starając się przy tym zawrzeć w swoich książkach esencję, czyli tzw. "samą śmietankę" danego tematu, więc postawiła ograniczenie, że każda książka może mieć max 100 stron.<br />
<br />
W związku z powyższym, autor danego zagadnienia, ma 100 stron, na wprowadzenie, oraz pokazanie wszystkich najważniejszych, najczęściej używanych i najprzydatniejszych rzeczy, przy okazji zbytnio nie przynudzając, ani nie przepisując ponownie całej dokumentacji technicznej.<br />
<br />
Jak na razie przeczytałem 2 książki z tej serii, jestem w trakcie czytania trzeciej i jak na razie mi się podoba (więcej niż typowy wpis na blogu, a mniej niż książki A.Troelsena ;-))<br />
<br />
Link: <a href="https://www.syncfusion.com/resources/techportal/ebooks">https://www.syncfusion.com/resources/techportal/ebooks</a>zchpithttp://www.blogger.com/profile/05978948926382258370noreply@blogger.com1