Friday, March 9, 2018

raid 1 set up

I bought HD enclosure: NST-27253-BK. it is from www.vantecusa.com. v1.01. Dual 2.5inch SATA SSD/HDD RAID enclsoure. serial number:0664400409.

specification from box: NexStarGX usb3.0 SATA SSD/HDD RAID enclsoure

  1. model: NST-27253-BK
  2. device support:SATA I/II/III SSD/HDD/SDHD
  3. device size:2 bay for 2.5" 7mm and 9.5mm SSD/HDD/SDHDs
  4. internal interface: SATA
  5. external interface: usb3.0 micro-B
  6. HDD capacity: 2 TB per bay, for a combined total of 4TB.
  7. power supply: USB AC adapter 5V/2A; micro USB to A, length :23 inches
  8. weight: 300g
  9. dimension:130x83x25mm
  10. system requirements: windows 7/8/10, MACX 10.6 or above. Linux ubuten 10.4(kernel 2.6.38)

Features:

  1. support Dual 2.5" SATA/I/II/III/SSD/HDD/SDHD
  2. support JBOD/RAID 0 /RAID 1
  3. Auto RAID 1 rebuild
  4. support UASP
  5. SATA interface support SATA III specification up to 6Gps

instruction to set up:

  1. power up unit
  2. wait for the drive to spin up speed
  3. press and hold the reset button for 3 seconds(HDD LEDS will turn off)
  4. release the reset button and the built-in controller will activate the RAID or normal mode based on the dip switch setting.
  • all new USB storage device need to be intialized, partition and formatted for the operating system you are using before it can store data.
  • for windows operating system, use Disk Management
  • for OS X, use disk utility to prepare this storage device
  • note: on Windows 10, plug in usb to computer, power up. the HDD LED lights are on. it shows current setting(JBOFS). now press reset button for 3 seconds. new drives get disconnected and then connected to computers based on sounds. and then new RAID 1 setting is enabled based on light below RAID 1 setting.
  • start Disk Management tool. PC automatically recognizes the uninitialized hard drive. it prompts you to format it. follow the prompts and format the hard drive. no quick format and no enable compression.
  • for details instruction refer to the FAQ " how to preparing a new storage, hard driver, or SSD for use with a system?" on our website support section at www.vantecusa.com

Hard Drive specifications:HGST TRAVELSTAR hard drive. o=bought on 03/08/2018.

  1. 1TB. 5400 RPM. 8MB/Mo Cache. 9.5mm.
  2. S/N: 1V2EYNEM (0S03508)
  3. 12-2017. made in China
  4. Bar-code: 05487 18982

Saturday, March 3, 2018

research on class design

research on class design. if we have a legacy software, how to improve it? this article gives some thoughts, then follow these threads, we can move on broader view.

  1. Discovering Hidden Design
  2. Choosing Structure over Naming

    There are many qualities that can make designs better. One that really helps names that have clear meaning in the domain. We can use those names to help us determine the relationship between different parts of our code. Beyond that, we can fall back on the classical ideas of coupling and cohesion — a design is good when it maximizes cohesion and minimizes coupling. Although the justification is rarely noted, it's likely that the concepts of coupling and cohesion are useful to us because they are cognitive aids for understanding unfamiliar things [1]. We can understand only so much at a time, so the pieces we attempt to understand should be small and their dependencies should be clear and few. We should be able to understand a chunk of code by itself. Good naming helps us by giving us a mental handle for the other chunks of code that a particular chunk depends upon. It helps us build up a web of understanding.

    There are times, however, when our code has internal clustering in its graph and we can't conceive of good names for the clusters. If that is the case, is it acceptable to choose a poor name and move forward with class extraction? Aren't we making our code a little worse if we do that? Again, everyone has to make their own judgment on a situation-by-situation basis, but it's worth considering that naming is only one aspect of program understanding. Code, in general, becomes more understandable when we are looking at chunks that don't have many dependencies on externals. When we can look at a piece and feel that we can understand it locally, we are more likely to be able to change it correctly. The fact that we don't have a good name for it is regrettable, but there is always the chance that we might find a good name later, or that we might eventually merge the the extracted class back into its original class and find a better to way to refactor. In the meantime, we get the benefit of local understanding. If that understanding is constructive relative to the original state of the code, the refactoring might be worthwhile.

  3. Coupling and Cohesion
  4. Structured Design
  5. Writing code for other people: cognitive psychology and the fundamentals of good software design principles
  6. code of damned: good website
  7. How to avoid temporal coupling in C#
  8. Design for change: Coupling and cohesion in object oriented systems
  9. All You Need to Know About UASP
  10. Identifying Object-Oriented Classes
  11. High Cohesion & Low Coupling using SOLID Principles -- Part 1
  12. High Cohesion & Low Coupling Using SOLID Principles -- Part 2
  13. Adaptive Code via C#:

Friday, March 2, 2018

research on scale

research on scale. plan is: plotting, zoom, pan on cp.com. chart engine on Devx. Gigasoft on scale and zoom design.

  1. ProEssentials v8 Help
  2. look at alphabetical listing. focus on "S" section: scale. especially on "scale Symbols".

  3. .NET C++ MFC Delphi ActiveX Charting Download
  4. Chapter 2: C# .NET WinForm Walk-Through VS2010
  5. user's manual=>Chapter 2 WPF WinForm ASP.NET =>

    1. WinForm C# 2010 Walkthrough or WinForm C# 2012 Walkthrough
    2. .NET example code is good place to review too
    3. .NET deployment is good place to review too
    4. .NET installation

  6. Build a Reusable Graphical Charting Engine with C#
  7. extract class design. study the required minimal property and methods to be a charting component.

  8. Welcome To JFreeChart!
  9. Scientific charting control
  10. n MFC Chart Control with Enhanced User Interface
  11. High-speed Charting Control
  12. Scientific charting control
  13. A simple C# library for graph plotting
  14. Plot Graphic Library
  15. Drawing Recurrence Plots with C#
  16. FPlot, a .NET library for plotting functions and measurement data
  17. AderPlotter
  18. Oscilloscope/StripChart Control
  19. Line Graph Component in C#
  20. Graphing Calculator in C# with LES
  21. A Simple Graph Control
  22. Graph Library
  23. Autoscaling Graph Control
  24. A 2D Graph Component With Zoom Capability
  25. Realtime Chart and Graph in One
  26. C# 2.0 Graphing Control
  27. Building a Graph control in 7 easy steps.
  28. Drawing a Line Graph in GDI+
  29. GraphDisplay: a Bezier based control for graphing functions and curves
  30. Graph control
  31. Tracker - A Windows Form graph control
  32. need to search graph on cp.com

  33. Bullet Graphs - A Custom Control - WPF vs. Windows Forms

Saturday, February 24, 2018

fix internet connection issue

fix internet connection issue

  1. Windows 10 PC will not connect to Internet
  2. As an ISP tech support rep, I have had a large number of calls since 12/9/16 reporting the same issue. Appears to be relate to the TCP/IP stack. Try the following, I have had a lot of success with it:

    1. open command prompt (admin)
    2. Type: netsh int ip reset then Enter
    3. Restart PC

  3. Resetting TCP/IP to Default
  4. How to reset TCP/IP by using the NetShell utility
  5. The Nuclear Option: Resetting The Crap Out Of Your Network Adapters in Vista
  6. Reset TCP/IP or Internet Protocol in Windows 10/8/7
  7. How to reset your network adapter in Windows 10
  8. How to permanently disable Windows Defender on Windows 10

Friday, February 23, 2018

set up Visual Studio 2008 for assembler

set up Visual Studio 2008 for assembler

  1. How to compile assembly files using vs2008?
  2. Right-click the project in the Solution Explorer window, Custom Build Rules, tick "Microsoft Macro Assembler". This ensures that any .asm files you add to your project get compiled with the custom build rule for .asm files.

    it works only when you create Windows 32 project in Visual Studio 2008: select console application, then empty project. after empty project is created, then remove all folders. in this case, no need to set up Entry Point in the Linker property tab.

    The basic question is more or less answered, but what if you want to do just assembly language in your Visual Studio project? Here is the answer:

    • Start with a General - Empty project.
    • Right-clicking on the project name in the solution explorer, set Custom Build Rules so that the Microsoft Macro Assembler is used.
    • Next, go to Project - Properties. Find the Linker in the dialog box and expand it (click on the +).
    • Under the Linker, select System.
    • On the top line, Subsystem, click the down arrow and choose "Console (/SUBSYSTEM:CONSOLE)."
    • In the same dialog box under Linker, select Advanced.
    • Edit the top line, Entry Point, so that it is the label you used as the starting point of your code. Note: You should not enter the underscore when filling
    • in the Entry Point. VS apparently adds an underscore.
    • Your environment is now set to do assembly langauge programming as a project.

    The procedure works also in Microsoft's free Visual C++ 2008 Express edition which is still downloadable from MS as of the date of this posting. Good luck and have fun!

  3. How to run Assembly Programs in Visual Studio
  4. How to run Assembly Programs in Visual Studio
  5. Guide to Using Assembly in Visual Studio .NET

decorator patterns

Saturday, February 10, 2018

dllmain example

tips and tricks on pre-compiled header

tips and tricks on pre-compiled header. my note is taken from the following posts.

  1. Precompiled headers
  2. Preparations

    With Visual C++ 6.0 you have to run devenv.exe with the undocumented /y3 option.
    In Visual Studio .Net you can get similar functionality by going to Tools->Options->Projects->VC++ Build and setting Build Timing to Yes.

    add some variation on this line to all copies of windows.h on my machine:
    #pragma message("Compiling windows.h - this should happen just once per project.\n")

    Setting up precompiled headers

    The only precompiled header settings that are efficient to use are the Create/Use pair of settings.( The documentation for these settings tells you what each setting does, but it fails to give you the big picture - it doesn't tell you how to setup a project to use these two together.)

    The basic idea is that one cpp file is specified as creating the precompiled header file and the other cpp files uses that precompiled header file. Because only one source file ever creates the precompiled header file it is guaranteed that it will only get built once per total rebuild.

    First you need to have one header file that every source file in your project will include. This is typically called stdafx.h or precompiled.h. If you don't have such a file, create it now. Check it to make sure it is including the appropriate set of header files - big header files that never change. Now make sure that every source file in your project is including this header file as the first non-comment thing that they do.

    Now you need one source file whose only job is to create the precompiled header file. It's best to have a source file exclusively for this purpose because every time this source file is modified, the .pch file will be regenerated. Generating the .pch file is an expensive operation that we are trying to avoid. This source file will typically be called stdafx.cpp or precompiled.cpp - to match the header file.

    Now it's time to go to project settings.

    1. First, make sure you select "All Configurations" so that your fixes will affect both debug and release builds of your project.

    2. Now, go to the C/C++ tab, precompiled headers category. Select "Use precompiled header file" and type in the name of your precompiled header file (stdafx.h or precompiled.h).

    3. If you try to build now your build will fail, giving a cryptic error about how it doesn't know how to create the .pch file. You need to tell it how.
      In the explorer view in project settings, open up your project and navigate down to the .cpp file that you chose for creating the precompiled header file (in VS.Net you will select that file from the Solution Explorer).
      Select that file, with "All Configurations" still selected, and select "Create precompiled header file", and type in the name of your precompiled header file.

    4. It kind of makes sense once you go through the steps. You give VC++ one source file to create the precompiled header file, and the other files all use it. This guarantees that it won't be rebuilt unnecessarily.
      You have to #include this file from all of your source files so that if you turn precompiled headers off, your program will compile in the same manner.

    5. The one fly in the ointment, the worrisome aspect of this feature, is that there is actually no guarantee that your program will behave identically, because VC++ doesn't enforce that your #include of the precompiled header file comes first. It enforces that you include the precompiled header file in each source file, but it will happily ignore includes, defines, and other code before that include. If you notice yourself getting some strange errors after changing your precompiled header files, that's probably why.
      Go through all of your source files and make sure that your precompiled header file is included first.

    6. That's it. If you have any problems then double check all of the steps, check the problematic source files for any preprocessor directives or code before the include of the precompiled header file, and maybe do a rebuild-all for good measure. If you want an example of a properly setup project to use as a reference, use the AppWizard to create an MFC project.

    7. You may be surprised. With Visual Studio .Net you can get a hierarchical list of header files used by setting Properties->C/C++->Advanced->Show Includes to yes.

    The defaults are dangerous

    For some projects - typically non-MFC projects, but the specifics depend on what version of VC++ you are using - the project wizard's set the precompiled header option to the seductive sounding "Automatic use of precompiled headers." Microsoft itself has admitted that this option is inefficient - yet they make it the default for many projects. Unless you are exquisitely careful this "automatic" use of precompiled headers translates to "rebuilding the precompiled headers for every source file." It is difficult to avoid this and keep it working properly. Don't use it. Either disable precompiled headers, or use them properly.

    If you use the DirectX AppWizard to create a non-MFC project, the newly created project will use the "Automatic use of precompiled headers" setting. Because of this these projects will take approximately twice as long to build as they need to. You need to manually fix them to get good build performance.

  3. Speed up C++ compilation, part 1: precompiled headers

Friday, February 9, 2018

set up MASM in visual studio

lcc compiler

PE utility

graphics API research

Friday, February 2, 2018

Debugging with command-line parameters in Visual Studio

Visual C++: include files from another project in the same solution

Visual C++: include files from another project in the same solution. I take note from the following pages and put it here for my own reference.

Settings for compiler

In the project where you want to #include the header file from another project, you will need to add the path of the header file into the Additional Include Directories section in the project configuration. To access the project configuration:
  1. Right-click on the project, and select Properties.
  2. Select Configuration Properties->C/C++->General.
  3. Set the path under Additional Include Directories.

How to include

To include the header file, simply write the following in your code:

#include "filename.h"

Note that you don't need to specify the path here, because you include the directory in the Additional Include Directories already, so Visual Studio will know where to look for it.

If you don't want to add every header file location in the project settings, you could just include a directory up to a point, and then #include relative to that point:

// In project settings
Additional Include Directories ..\..\libroot

// In code
#include "lib1/lib1.h" // path is relative to libroot
#include "lib2/lib2.h" // path is relative to libroot

Setting for linker

If using static libraries (i.e. .lib file), you will also need to add the library to the linker input, so that at linkage time the symbols can be linked against (otherwise you'll get an unresolved symbol):
  1. Right-click on the project, and select Properties.
  2. Select Configuration Properties->Linker->Input
  3. Enter the library under Additional Dependencies. for example: MyLibX.lib
  4. Linker->General->Additional Library Directories: ..\MyLibX;
    //(for example). if adding reference is set, we still need to set up this step.
    we can combine 3) and 4) in 3) as: ..\MyLibX\MyLibX.lib

the above notes are from following links.

  1. visual c++: #include files from other projects in the same solution
  2. #include files from another project in Visual Studio Solution

SQLite

Saturday, January 27, 2018

Visual Studio 2008 setup

walk through to create DLL in visual studio 2008 ,2010, 2015, and 2017

    I tested and summarized my note on creating DLL in Visual Studio different versions.

  1. Walkthrough: Creating and Using a Dynamic Link Library (C++)- you can find Visual Studio 2008
  2. for Visual Studio 2008, when you use DLL, just do steps:

    1. reference DLL assembly: Project Properties-> Common Properties ->Reference -> Add New reference:
    2. project Properties -> Configuration Properties->C/C++ node->add additional include directories, specify where .h file is located
    3. update PATH environment info to tell where DLL is located because executable does not load DLL until runtime. so you need to tell where to load DLL file: Project property page-> configuration properties->Debugging:: Environment, type path such as PATH=. here I used $(TargetDir)


  3. Walkthrough: Creating and Using a Dynamic Link Library (C++)
  4. in Visual Studio 2015, we have another way to add reference this DLL. it is the same as regular .NET assembly reference. need to test it out on Visual Studio 2017 sometime.

    first create a client Windows console application.

    To use the functionality from the class library in the app

    1. When the Win32 Application Wizard finishes, a minimal console application project is created for you. The name for the main source file is the same as the project name that you chose earlier. In this example, it is named MathClient.cpp.
    2. To use the math routines that you created in the DLL, you must reference the DLL in your app. To do this, under the MathClient project in Solution Explorer, select the References item. On the menu bar, choose Project, Add Reference.
    3. The Add Reference dialog box lists the libraries that you can reference. The Projects tab lists the projects in the current solution and any libraries that they contain. On the Projects tab, select the check box next to MathLibrary, and then choose the OK button.
    4. You need the definitions in the MathLibrary.h file to call the DLLs functions from your app. You could copy the header file into your client app project, but that might lead to changes in one copy that are not reflected in the other. To avoid this issue when you reference the header files of the DLL, you can change the included directories path in your project to include the original header.

      To do this, open the Property Pages dialog box for the MathClient project. In the left pane, expand Configuration Properties, C/C++ node, and then select General. In the center pane, select the drop-down control next to the Additional Include Directories edit box, and then choose . Select the top pane of the Additional Include Directories dialog box to enable an edit control. In the edit control, specify the path to the location of the MathLibrary.h header file. Because typing the complete path may be difficult, you can use the browse control (...) at the end of the edit box to bring up a Select Directory dialog box. In the dialog, navigate up one folder level to the MathLibraryAndClient folder, then select the MathLibrary folder, and then choose the Select Folder button. Once you've entered the path to the header file in the Additional Include Directories dialog box, choose the OK button to go back to the Property Pages dialog box, and then choose the OK button to save your changes.

    5. You can now include the MathLibrary.h file and use the Functions class in your client application. Replace the contents of MathClient.cpp by using the following code:
    6. NOTE In older versions of Visual Studio, references are added to your project in a different way. Select the MathClient project in Solution Explorer, and then on the menu bar, choose Project, References. In the Property Pages dialog box, expand the Common Properties node, select Framework and References, and then choose the Add New Reference button. For more information about the References dialog box, see Adding references.


  5. Walk through: Create and use your own Dynamic Link Library (C++)::Visual Studio 2017
  6. In visual Studio 2017, when we create DLL prpoject, we have more settings(but I tried in Visual Studio 2008 with the same steps):

    1. generate windows 32 console application - > select DLL -> leave checked precompiled headers.
    2. make sure MATHLIBRARY_EXPORTS is set up in preprocessor:Project-> properties->Configuration Properties -> C/C++-> preprocessor definitions. if it is MathLibrary_EXPORT, you need to edit it into MATHLIBRARY_EXPORTS.
      when you edit this field, please make sure to do: Property Pages dialog, change the Configuration drop-down to All Configurations
    3. inside source folder, dllmain.cpp is automatically generated. no touch.
    4. build this project, it will succeed.

    in visual Studio 2017, when we create a console application to use DLL prpoject, we have more settings:

    1. create a windows 32 console application with precompiled header file checked.
    2. to call the functions MathLibrary.dll, your project needs to include MathLibrary.h. you can either copy this file into your client app directory, or set up Additional Include Directories path in your client app project to include the path to original DLL header .
      Property Pages-> configuration drop down, select ALL Configurations if not already selected. then go to Configuration Properties-> C/C++ ->General-> select Additional Include Directories edit box.
      in my project settings, I used ..\MathLibrary
    3. At this point, your MathClient can be compiled, but not linked. the linker must be able to find the MathLibrary.lib file to link successfully. you can either copy MathLibrary.lib to your Mathclient app project, or you can point it to MathLibrary directory (in fact it is Debug folder).
      MathClient project->Property Pages ->Configuration drop down, please select All Configuration if it is not already selected. ->Configuration Properties-> Linker->Input->Additional Dependencies->Edit, type MathLibrary.lib .
      It specifies additional items to add to the link command line. (i.e.,kernel32.lib)
    4. in the left pane, select Configuration Properties->Linker->General->Additional Library Directories->Edit
      please enter ..\MathLibrary\$(IntDir)
      this will tell where to find MathLibrary.lib file.
      in Visual Studio 2017, it is written as: this Additional Library Directories allows user to override the environmental library path. (/LIBPATH: folder)
      in Visual Studio 2008, it is written as: specifies one or more additional paths to search for libraries; configuration specific; use semicolon delimited list if more than one. (/LIBPATH:[dir]
    5. Build MathClient project. it will succeed.
    6. post-build event seems like not necessary.


  7. Projects in Visual C++ 2010 – Part 1: Creating a DLL project
  8. In Visual Studio 2010, to create a DLL without template class, we have following steps:

    1. Create a Class library. the default it will create a dynamic library. please verify by Project Properties->Configuration Properties->General->Project Defaults->Configuration Type: dynamic library. make sure NO common language runtime support.
    2. Add header Printable.h. make sure following __declspec(dllexport) and __declspec(dllimport) are used:
      #ifdef COMPILE_MYLIBRARY
      #define MYLIBRARY_EXPORT __declspec(dllexport)
      #else
      #define MYLIBRARY_EXPORT __declspec(dllimport)
      #endif
      class MYLIBRARY_EXPORT PrintableInt {};
    3. Project Properties-> Configuration : ALL Configuration
    4. Project Properties->Configuration Properties->C/C++-> Preprocessor-> preprocessor definition: COMPILE_MYLIBRARY;
    5. Add source file Printable.cpp(in my project it is MyLibX.cpp. either way is fine).
    6. Add MyLibXClient console application.
    7. specify Include Path. Make sure All Configuration is selected from "configuration" dropdown:
      from project properties->configuration Properties -> C/C++ -> General->Additional Include Directies: type, ..\MyLibX
      Make sure All Configuration Type is selected.
      it will tell VS 2010 where to find PrintableInt.h file. if you compile the client app now, you will have link error.
    8. specify Lib file. it is to specify the path to the .lib file of the library project. note your DLL projects will create a .LIB file so that this console app will link against the DLL automatically.
      Linker->Input-> Additional Dependencies
      type such as ..\MyLibX\$(IntDir)\MyLibX.lib
    9. from Visual Studio 2010, referencing a DLL is simplified.
      project properties->common properties->Framework and Reference->Add New Reference button: you can add MyLibX project in.
      when you compile it, it will fail because it needs MyLibX.lib. to create this MyLibX.lib file, __declspec(dllexport) must be used.

      in Visual Studio 2010, we still need to set up include directories in the above step: Configuration :
      configuration properties->Linker->General->Additional Library Directories: type relative path.
      My Note: I tested that this step is not needed after adding reference.

      I also tested this step: with adding reference to MyLibX , we don't need to set up this step:
      configuration properties->Linker->Input->Additional Dependencies:type lib name such as MyLibX.lib. or we can type relative path plus lib name such as ..\MyLibX\MyLibX.lib

    it looks like template class can not create .lib file after validation. I tested on Visual Studio 2008. template class project will not produce .lib file.


  9. Basic C++ Win32 DLL
  10. Walkthrough: Creating and Using a Dynamic Link Library (C++)-- Visual Studio 2015
  11. Execute a function in any Win32 DLL - Reflection in Win32 DLL?
  12. DLL Tutorial For Beginners
  13. C++ Tutorial Create a DLL in VC++ 2013 or 2015
  14. C++ Tutorial: Create a DLL in VC++ 2010/2008
  15. Exporting C Functions for Use in C or C++ Language Executables
  16. Exporting from a DLL Using __declspec(dllexport)
  17. Importing into an Application Using __declspec(dllimport)

Layout manager

Saturday, January 20, 2018

VC++ property page setup/graphics

VS linker setups

__desclspec(dllexport) etc.

  1. A super easy DLL made in VC++ IDE, especially for the first time tasters
  2. HowTo: Export C++ classes from a DLL
  3. Basic C++ Win32 DLL
  4. Dlls are Simple. Part 1
  5. DLLs are simple: Part 2
  6. The Ultimate (DLL) Header File
  7. Win32/Linux Dynamic Library Loader Class
  8. A way for a MFC DLL to deal, at runtime, with BSTR from Visual Basic and from Visual C++

  9. Exporting C++ classes without using MFC extension DLL
  10. Exporting C++ Classes from an MFC Extension DLL
  11. Beginner's Guide
  12. Interface-based Programming, Runtime Class Discovery, Dynamic Class Loading from DLL
  13. A Beginner's Guide to Pointers
  14. Technical Guide on C
  15. Step by Step: Calling C++ DLLs from VC++ and VB - Part 1
  16. Step by Step: Calling C++ DLLs from VC++ and VB - Part 2
  17. Step by Step: Calling C++ DLLs from VC++ and VB - Part 3
  18. Step by Step: Calling C++ DLLs from VC++ and VB - Part 4
  19. Creating and consuming MFC DLLs for Beginners
  20. How to create a DLL library in C and then use it with C#
  21. Creating Import Library from a DLL with Header File
  22. Importing a Locally Defined Symbol without Using a Module Definition File
  23. DllExports - Common Problems and Solutions
  24. Calling methods from Dll compiled in 'C' from C#
  25. DLL Template which lets your project take off
  26. Understanding DLLs – Building them and Allowing External Calls to their Functions
  27. a Tiny Parser Generator v1.2

Saturday, January 13, 2018