Saturday, May 18, 2013

CNN, Yahoo!, and Wikipedia

I'm just done with a little cute project that involved browsing CNN Money for stock ticker symbols, getting more data from Yahoo Finance csv API and general information from Wikipedia.

I started searching on Google and found the CNN's website. After browsing and finding relevant data, I parsed the source with C# (Linq-to-XML), that is after deleting elements and other things that aren't XML in that HTML source. (I later used MindTouch's SGML Reader https://github.com/MindTouch/SGMLReader).

Initially this wasn't a software task. I was conversing with a Finance fresh graduate about stocks and related interesting topics such as Fundamental and Technical analysis (of which I know nothing) and I was motivated to look into these things.

I wanted to list information about many companies from several sources, so I ended up automating the task.

Sunday, May 12, 2013

Develop with pleasure


IntelliJ's code editor features provides lots of incentives for me to discover the underlying infrastructure on which it is built. My IntelliJ's (version 12) feature of the day is how IntelliJ collapses anonymously implemented Java interfaces into a lambda syntax.

For example (this is a snippet for IntelliJ's source code as released by JetBrains as open source. PLEASE READ THEIR LICENCE AGREEMENT IF YOU WANT TO USE THIS, which is at least polite):

 Function ID = new Function() {
    @Override
    public Object fun(final Object o) {
      return o;
    }
  };

Is displayed as the following with a + sign on the left. The following outlining expands to the previous when the + is pressed.

[+] Function ID = (o) -> { return o; };

As a side note, in C#, that's the actual syntax! (except for -> is lambda operator =>).

In Java 8, Lambdas are introduced as a shortcut way to implement interfaces, so an anonymously defined interface is a Java lambda, and IntelliJ displays it concisely as such!

This is done by PSI for sure. I wonder about the details of the API though. I shall get back here when I figure this out.

Saturday, May 4, 2013

Dump of file user32.dll

On Windows 8.

All these functions should be documented in detail some where in the documents of the native Windows SDK APIs.

Dump of file user32.dll

File Type: DLL

  Section contains the following exports for USER32.dll

    00000000 characteristics
    501088D6 time date stamp Wed Jul 25 17:01:26 2012
        0.00 version
        1502 ordinal base
        1040 number of functions
         897 number of names

    ordinal hint RVA      name

       1503    0 0003E680 ActivateKeyboardLayout
       1504    1 0002DE90 AddClipboardFormatListener
       1505    2 00012960 AdjustWindowRect
       1506    3 00009D80 AdjustWindowRectEx
       1507    4 00079C9C AlignRects
       1508    5 00047614 AllowForegroundActivation
       1509    6 000086F0 AllowSetForegroundWindow
       1510    7 00076438 AnimateWindow
       1511    8 00076394 AnyPopup
       1512    9 000784F4 AppendMenuA
       1513    A 00017CC0 AppendMenuW
       1514    B 00047A4C ArrangeIconicWindows
       1515    C 0000E720 AttachThreadInput
       1516    D 0000E350 BeginDeferWindowPos
       1517    E 00004A10 BeginPaint
       1518    F 00040270 BlockInput
       1519   10 0001EF30 BringWindowToTop
       1520   11 00078048 BroadcastSystemMessage
       1521   12 00078048 BroadcastSystemMessageA
       1522   13 00078074 BroadcastSystemMessageExA
       1523   14 00048B4C BroadcastSystemMessageExW
       1524   15 0002A4F0 BroadcastSystemMessageW
       1525   16 0003C8B0 BuildReasonArray
       1526   17 0000BD10 CalcMenuBar
       1527   18 000402A0 CalculatePopupWindowPosition
       1528   19 00078920 CallMsgFilter
       1529   1A 00078920 CallMsgFilterA
       1530   1B 0002C170 CallMsgFilterW
       1531   1C 00001880 CallNextHookEx
       1532   1D 00048F20 CallWindowProcA
       1533   1E 00004290 CallWindowProcW
       1534   1F 000510D8 CancelShutdown
       1535   20 00047A28 CascadeChildWindows
       1536   21 0006E448 CascadeWindows
       1537   22 000240C0 ChangeClipboardChain
       1538   23 00078A34 ChangeDisplaySettingsA
       1539   24 0001F550 ChangeDisplaySettingsExA
       1540   25 000145D0 ChangeDisplaySettingsExW
       1541   26 0001F7F0 ChangeDisplaySettingsW
       1542   27 0006E6A4 ChangeMenuA
       1543   28 0006E754 ChangeMenuW
       1544   29 0000D9D0 ChangeWindowMessageFilter
       1545   2A 00008AA0 ChangeWindowMessageFilterEx
       1546   2B 000039F0 CharLowerA
       1547   2C 00079BE8 CharLowerBuffA
       1548   2D 00013B00 CharLowerBuffW
       1549   2E 000113A0 CharLowerW
       1555   2F 0000B840 CharNextA
       1556   30 00044B90 CharNextExA
       1557   31 0000B830 CharNextW
       1558   32 000159A0 CharPrevA
       1559   33 00079BF8 CharPrevExA
       1560   34 00015980 CharPrevW
       1561   35 0000A870 CharToOemA
       1562   36 000715E8 CharToOemBuffA
       1563   37 00071678 CharToOemBuffW
       1564   38 0007157C CharToOemW
       1565   39 000039A0 CharUpperA
       1566   3A 00079BD8 CharUpperBuffA
       1567   3B 00015990 CharUpperBuffW
       1568   3C 0000B510 CharUpperW
       1569   3D 00014F10 CheckDBCSEnabledExt
       1570   3E 0002B6C0 CheckDlgButton
       1571   3F 0002D9E0 CheckMenuItem
       1572   40 0002CB70 CheckMenuRadioItem
       1573   41 000402C0 CheckProcessForClipboardAccess
       1574   42 00008AD0 CheckProcessSession
       1575   43 0002B3F0 CheckRadioButton
       1576   44 000402D0 CheckWindowThreadDesktop
       1577   45 00048A28 ChildWindowFromPoint
       1578   46 0002F400 ChildWindowFromPointEx
       1579   47 00045238 CliImmSetHotKey
       1580   48 000052F0 ClientThreadSetup
       1581   49 0000E420 ClientToScreen
       1582   4A 000310E0 ClipCursor
       1583   4B 0002D830 CloseClipboard
       1584   4C 00018290 CloseDesktop
       1585   4D 00046ED8 CloseGestureInfoHandle
       1586   4E 0004A54C CloseTouchInputHandle
       1587   4F 0002C130 CloseWindow
       1588   50 00018280 CloseWindowStation
       1589   51 00003320 ConsoleControl
       1590   52 00040640 ControlMagnification
       1591   53 00049D88 CopyAcceleratorTableA
       1592   54 00011230 CopyAcceleratorTableW
       1593   55 0002EAD0 CopyIcon
       1594   56 0000E580 CopyImage
       1595   57 00004DA0 CopyRect
       1596   58 0001F0E0 CountClipboardFormats
       1597   59 00049E08 CreateAcceleratorTableA
       1598   5A 000125F0 CreateAcceleratorTableW
       1599   5B 0000E990 CreateCaret
       1600   5C 000254E0 CreateCursor
       1601   5D 00011220 CreateDCompositionHwndTarget
       1602   5E 00047E94 CreateDesktopA
       1603   5F 00047ED0 CreateDesktopExA
       1604   60 00021CF0 CreateDesktopExW
       1605   61 00021CB0 CreateDesktopW
       1606   62 00049C80 CreateDialogIndirectParamA
       1607   63 0001DA60 CreateDialogIndirectParamAorW
       1608   64 0002B640 CreateDialogIndirectParamW
       1609   65 00049AFC CreateDialogParamA
       1610   66 0001DAE0 CreateDialogParamW
       1611   67 00049A60 CreateIcon
       1612   68 00049860 CreateIconFromResource
       1613   69 00011FD0 CreateIconFromResourceEx
       1614   6A 00012110 CreateIconIndirect
       1615   6B 0006CDD8 CreateMDIWindowA
       1616   6C 0006CD64 CreateMDIWindowW
       1617   6D 00013AE0 CreateMenu
       1618   6E 00030F40 CreatePopupMenu
       1619   6F 00076288 CreateSystemThreads
       1620   70 00016260 CreateWindowExA
       1621   71 0000C5B0 CreateWindowExW
       1622   72 00012C20 CreateWindowInBand
       1623   73 00075670 CreateWindowIndirect
       1624   74 00048038 CreateWindowStationA
       1625   75 00021990 CreateWindowStationW
       1626   76 0003B5E0 CsrBroadcastSystemMessageExW
       1627   77 00021960 CtxInitUser32
       1628   78 0007738C DdeAbandonTransaction
       1629   79 00063814 DdeAccessData
       1630   7A 00063554 DdeAddData
       1631   7B 00077734 DdeClientTransaction
       1632   7C 00064280 DdeCmpStringHandles
       1633   7D 0004FBD0 DdeConnect
       1634   7E 0004F91C DdeConnectList
       1635   7F 000636D4 DdeCreateDataHandle
       1636   80 000644D0 DdeCreateStringHandleA
       1637   81 00019FC0 DdeCreateStringHandleW
       1638   82 0004EE54 DdeDisconnect
       1639   83 0004ED4C DdeDisconnectList
       1640   84 00046040 DdeEnableCallback
       1641   85 000634E4 DdeFreeDataHandle
       1642   86 00019C20 DdeFreeStringHandle
       1643   87 00063AA0 DdeGetData
       1644   88 000520E4 DdeGetLastError
       1645   89 0000A3D0 DdeGetQualityOfService
       1646   8A 00052064 DdeImpersonateClient
       1647   8B 00052130 DdeInitializeA
       1648   8C 0001A0A0 DdeInitializeW
       1649   8D 00064298 DdeKeepStringHandle
       1650   8E 000199A0 DdeNameService
       1651   8F 000770E4 DdePostAdvise
       1652   90 00077540 DdeQueryConvInfo
       1653   91 0004EEF0 DdeQueryNextServer
       1654   92 0006449C DdeQueryStringA
       1655   93 00064470 DdeQueryStringW
       1656   94 0004F790 DdeReconnect
       1657   95 0000A3D0 DdeSetQualityOfService
       1658   96 000774B8 DdeSetUserHandle
       1659   97 000638B8 DdeUnaccessData
       1660   98 00019D10 DdeUninitialize
       1661   99          DefDlgProcA (forwarded to NTDLL.NtdllDialogWndProc_A)
       1662   9A          DefDlgProcW (forwarded to NTDLL.NtdllDialogWndProc_W)
       1663   9B 0006CD3C DefFrameProcA
       1664   9C 00023110 DefFrameProcW
       1665   9D 0006CD20 DefMDIChildProcA
       1666   9E 00022FB0 DefMDIChildProcW
       1667   9F 00048E04 DefRawInputProc
       1668   A0          DefWindowProcA (forwarded to NTDLL.NtdllDefWindowProc_A)
       1669   A1          DefWindowProcW (forwarded to NTDLL.NtdllDefWindowProc_W)
       1670   A2 0000E3B0 DeferWindowPos
       1671   A3 00044BB0 DeferWindowPosAndBand
       1672   A4 0000A7C0 DeleteMenu
       1673   A5 0002E480 DeregisterShellHookWindow
       1674   A6 00016C10 DestroyAcceleratorTable
       1675   A7 0000DF40 DestroyCaret
       1676   A8 0000E540 DestroyCursor
       1677   A9 0000A7E0 DestroyDCompositionHwndTarget
       1678   AA 0000E540 DestroyIcon
       1679   AB 0000A7D0 DestroyMenu
       1680   AC 0003D540 DestroyReasons
       1681   AD 00003540 DestroyWindow
       1682   AE 00050F00 DeviceEventWorker
       1683   AF 00049CA8 DialogBoxIndirectParamA
       1684   B0 0002B8E0 DialogBoxIndirectParamAorW
       1685   B1 0002BC00 DialogBoxIndirectParamW
       1686   B2 00049BBC DialogBoxParamA
       1687   B3 0002BB80 DialogBoxParamW
       1688   B4 00017930 DisableProcessWindowsGhosting
       1689   B5 000056C0 DispatchMessageA
       1690   B6 00001520 DispatchMessageW
       1691   B7 000131F0 DisplayConfigGetDeviceInfo
       1692   B8 00079C4C DisplayConfigSetDeviceInfo
       1693   B9 00051150 DisplayExitWindowsWarnings
       1694   BA 0006A460 DlgDirListA
       1695   BB 0004D650 DlgDirListComboBoxA
       1696   BC 0004D5F4 DlgDirListComboBoxW
       1697   BD 0006A400 DlgDirListW
       1698   BE 0004D7B4 DlgDirSelectComboBoxExA
       1699   BF 0004D738 DlgDirSelectComboBoxExW
       1700   C0 0006A35C DlgDirSelectExA
       1701   C1 0006A324 DlgDirSelectExW
       1702   C2 0003D820 DoSoundConnect
       1703   C3 0003C870 DoSoundDisconnect
       1704   C4 00040340 DragDetect
       1705   C5 00040350 DragObject
       1706   C6 00040360 DrawAnimatedRects
       1707   C7 00070BCC DrawCaption
       1708   C8 0007881C DrawCaptionTempA
       1709   C9 00050D5C DrawCaptionTempW
       1710   CA 0000F470 DrawEdge
       1711   CB 0002C8F0 DrawFocusRect
       1712   CC 0007B634 DrawFrame
       1713   CD 0007B578 DrawFrameControl
       1714   CE 0002A7D0 DrawIcon
       1715   CF 00009500 DrawIconEx
       1716   D0 0002D610 DrawMenuBar
       1717   D1 0006E4A0 DrawMenuBarTemp
       1718   D2 0006ED70 DrawStateA
       1719   D3 0001B430 DrawStateW
       1720   D4 0005192C DrawTextA
       1721   D5 000519A4 DrawTextExA
       1722   D6 0000EA20 DrawTextExW
       1723   D7 000073A0 DrawTextW
       1724   D8 00031480 DwmGetDxSharedSurface
       1725   D9 0003B6D0 DwmGetRemoteSessionOcclusionEvent
       1726   DA 000403A0 DwmGetRemoteSessionOcclusionState
       1727   DB 0003B920 DwmLockScreenUpdates
       1728   DC 0003D8B0 DwmStartRedirection
       1729   DD 0003C880 DwmStopRedirection
       1730   DE 00008380 DwmValidateWindow
       1731   DF 00056A08 EditWndProc
       1732   E0 00029E60 EmptyClipboard
       1733   E1 0002D940 EnableMenuItem
       1734   E2 0002FD70 EnableMouseInPointer
       1735   E3 0002C7C0 EnableScrollBar
       1736   E4 00013E80 EnableSessionForMMCSS
       1737   E5 0000E600 EnableWindow
       1738   E6 0000E380 EndDeferWindowPos
       1739   E7 0000E390 EndDeferWindowPosEx
       1740   E8 0002BB00 EndDialog
       1741   E9 00013B40 EndMenu
       1742   EA 00004A00 EndPaint
       1743   EB 00051020 EndTask
       1744   EC 00072188 EnterReaderModeHelper
       1745   ED 00008F30 EnumChildWindows
       1746   EE 0002D070 EnumClipboardFormats
       1747   EF 00013700 EnumDesktopWindows
       1748   F0 00018A40 EnumDesktopsA
       1749   F1 00018710 EnumDesktopsW
       1750   F2 00017160 EnumDisplayDevicesA
       1751   F3 000133E0 EnumDisplayDevicesW
       1752   F4 0000B490 EnumDisplayMonitors
       1753   F5 00031540 EnumDisplaySettingsA
       1754   F6 00031560 EnumDisplaySettingsExA
       1755   F7 00013290 EnumDisplaySettingsExW
       1756   F8 000133B0 EnumDisplaySettingsW
       1757   F9 00046B80 EnumPropsA
       1758   FA 00046B54 EnumPropsExA
       1759   FB 00046B44 EnumPropsExW
       1760   FC 00046B64 EnumPropsW
       1761   FD 0000DFF0 EnumThreadWindows
       1762   FE 00018A20 EnumWindowStationsA
       1763   FF 00018750 EnumWindowStationsW
       1764  100 0000A000 EnumWindows
       1765  101 00002450 EqualRect
       1766  102 000749CC EvaluateProximityToPolygon
       1767  103 0001EC00 EvaluateProximityToRect
       1768  104 0003E040 ExcludeUpdateRgn
       1769  105 0003CC70 ExitWindowsEx
       1770  106 00007570 FillRect
       1771  107 00079120 FindWindowA
       1772  108 00018AA0 FindWindowExA
       1773  109 000185C0 FindWindowExW
       1774  10A 0000B160 FindWindowW
       1775  10B 000479D4 FlashWindow
       1776  10C 000403C0 FlashWindowEx
       1777  10D 0002C8C0 FrameRect
       1778  10E 00053088 FreeDDElParam
       1779  10F 000403D0 FrostCrashedWindow
       1780  110 000086E0 GetActiveWindow
       1781  111 00078748 GetAltTabInfo
       1782  112 00078748 GetAltTabInfoA
       1783  113 00050D38 GetAltTabInfoW
       1784  114 00001F20 GetAncestor
       1785  115 0000B6E0 GetAppCompatFlags
       1786  116 000032B0 GetAppCompatFlags2
       1787  117 00003A70 GetAsyncKeyState
       1788  118 000310F0 GetAutoRotationState
       1789  119 000403F0 GetCIMSSM
       1790  11A 0000DCE0 GetCapture
       1791  11B 0000B710 GetCaretBlinkTime
       1792  11C 000191D0 GetCaretPos
       1793  11D 00031FE0 GetClassInfoA
       1794  11E 00032010 GetClassInfoExA
       1795  11F 0000CBE0 GetClassInfoExW
       1796  120 0000CDE0 GetClassInfoW
       1797  121 0007838C GetClassLongA
       1798  122 000783CC GetClassLongPtrA
       1799  123 00009420 GetClassLongPtrW
       1800  124 00014650 GetClassLongW
       1801  125 00076ECC GetClassNameA
       1802  126 00004E70 GetClassNameW
       1803  127 00009330 GetClassWord
       1804  128 00004B50 GetClientRect
       1805  129 00040400 GetClipCursor
       1806  12A 00040410 GetClipboardAccessToken
       1807  12B 0002CE70 GetClipboardData
       1808  12C 00079084 GetClipboardFormatNameA
       1809  12D 0002FF30 GetClipboardFormatNameW
       1810  12E 00016CC0 GetClipboardOwner
       1811  12F 0002F3F0 GetClipboardSequenceNumber
       1812  130 00040420 GetClipboardViewer
       1813  131 0002F420 GetComboBoxInfo
       1814  132 0000E710 GetCurrentInputMessageSource
       1815  133 00003A60 GetCursor
       1816  134 0002AD90 GetCursorFrameInfo
       1817  135 0000DD00 GetCursorInfo
       1818  136 00003570 GetCursorPos
       1819  137 00003D40 GetDC
       1820  138 000089A0 GetDCEx
       1821  139 0000E1C0 GetDesktopID
       1822  13A 000081B0 GetDesktopWindow
       1823  13B 0002D720 GetDialogBaseUnits
       1824  13C 00031150 GetDisplayAutoRotationPreferences
       1825  13D 0000DA80 GetDisplayConfigBufferSizes
       1826  13E 0000DE60 GetDlgCtrlID
       1827  13F 00015D00 GetDlgItem
       1828  140 00053970 GetDlgItemInt
       1829  141 000782F8 GetDlgItemTextA
       1830  142 0002B960 GetDlgItemTextW
       1831  143 0000A6A0 GetDoubleClickTime
       1832  144 00003400 GetFocus
       1833  145 00003410 GetForegroundWindow
       1834  146 00003290 GetGUIThreadInfo
       1835  147 00028110 GetGestureConfig
       1836  148 00046F58 GetGestureExtraArgs
       1837  149 00046F74 GetGestureInfo
       1838  14A 00040450 GetGuiResources
       1839  14B 0000A390 GetIconInfo
       1840  14C 00049914 GetIconInfoExA
       1841  14D 0002A9C0 GetIconInfoExW
       1842  14E 000479C4 GetInputDesktop
       1843  14F 00040480 GetInputLocaleInfo
       1844  150 00076364 GetInputState
       1845  151 00040490 GetInternalWindowPos
       1846  152 000475E0 GetKBCodePage
       1847  153 00078FDC GetKeyNameTextA
       1848  154 00050EF4 GetKeyNameTextW
       1849  155 0000DD90 GetKeyState
       1850  156 00002090 GetKeyboardLayout
       1851  157 000086A0 GetKeyboardLayoutList
       1852  158 00078F7C GetKeyboardLayoutNameA
       1853  159 000301C0 GetKeyboardLayoutNameW
       1854  15A 0000DD40 GetKeyboardState
       1855  15B 0001F860 GetKeyboardType
       1856  15C 000099B0 GetLastActivePopup
       1857  15D 000020E0 GetLastInputInfo
       1858  15E 000404B0 GetLayeredWindowAttributes
       1859  15F 000404C0 GetListBoxInfo
       1860  160 0006C5BC GetMagnificationDesktopColorEffect
       1861  161 0006C4BC GetMagnificationDesktopMagnification
       1862  162 00040650 GetMagnificationLensCtxInformation
       1863  163 0002F330 GetMenu
       1864  164 0000EA60 GetMenuBarInfo
       1865  165 0006E5C4 GetMenuCheckMarkDimensions
       1866  166 0006E5A4 GetMenuContextHelpId
       1867  167 00030FF0 GetMenuDefaultItem
       1868  168 0002CC70 GetMenuInfo
       1869  169 000039C0 GetMenuItemCount
       1870  16A 00030E30 GetMenuItemID
       1871  16B 00030A00 GetMenuItemInfoA
       1872  16C 0002F900 GetMenuItemInfoW
       1873  16D 0002D510 GetMenuItemRect
       1874  16E 0002D430 GetMenuState
       1875  16F 00078184 GetMenuStringA
       1876  170 0002D620 GetMenuStringW
       1877  171 00005720 GetMessageA
       1878  172 00008930 GetMessageExtraInfo
       1879  173 00008990 GetMessagePos
       1880  174 0000DD30 GetMessageTime
       1881  175 00001ED0 GetMessageW
       1882  176 00016FD0 GetMonitorInfoA
       1883  177 0000A450 GetMonitorInfoW
       1884  178 000404E0 GetMouseMovePointsEx
       1885  179 00053D00 GetNextDlgGroupItem
       1886  17A 0002B270 GetNextDlgTabItem
       1887  17B 0002D0A0 GetOpenClipboardWindow
       1888  17C 000048A0 GetParent
       1889  17D 00003B50 GetPhysicalCursorPos
       1890  17E 00028120 GetPointerCursorId
       1891  17F 0002E540 GetPointerDevice
       1892  180 0002E590 GetPointerDeviceCursors
       1893  181 0002E580 GetPointerDeviceProperties
       1894  182 0000A690 GetPointerDeviceRects
       1895  183 0000A680 GetPointerDevices
       1896  184 00049670 GetPointerFrameInfo
       1897  185 0001E990 GetPointerFrameInfoHistory
       1898  186 00049568 GetPointerFramePenInfo
       1899  187 00049530 GetPointerFramePenInfoHistory
       1900  188 0001ED20 GetPointerFrameTouchInfo
       1901  189 00049638 GetPointerFrameTouchInfoHistory
       1902  18A 0001E8F0 GetPointerInfo
       1903  18B 0001ED70 GetPointerInfoHistory
       1904  18C 000495EC GetPointerPenInfo
       1905  18D 000495A8 GetPointerPenInfoHistory
       1906  18E 0001E9E0 GetPointerTouchInfo
       1907  18F 000280B0 GetPointerTouchInfoHistory
       1908  190 0001EA30 GetPointerType
       1909  191 000404F0 GetPriorityClipboardFormat
       1910  192 0002F460 GetProcessDefaultLayout
       2521  193 000032F0 GetProcessUIContextInformation
       1911  194 00005250 GetProcessWindowStation
       1912  195 000477F0 GetProgmanWindow
       1913  196 0001EFC0 GetPropA
       1914  197 00003C80 GetPropW
       1915  198 00003440 GetQueueStatus
       1916  199 00062D90 GetRawInputBuffer
       1917  19A 00003B90 GetRawInputData
       1918  19B 00077EF8 GetRawInputDeviceInfoA
       1919  19C 0002E560 GetRawInputDeviceInfoW
       1920  19D 00012B90 GetRawInputDeviceList
       1921  19E 000280F0 GetRawPointerDeviceData
       1922  19F 0003D450 GetReasonTitleFromReasonCode
       1923  1A0 00040510 GetRegisteredRawInputDevices
       1924  1A1 0000BF90 GetScrollBarInfo
       1925  1A2 00017680 GetScrollInfo
       1926  1A3 00029AC0 GetScrollPos
       1927  1A4 000762A8 GetScrollRange
       1928  1A5 000475CC GetSendMessageReceiver
       1929  1A6 00009710 GetShellWindow
       1930  1A7 0002FDD0 GetSubMenu
       1931  1A8 00003ED0 GetSysColor
       1932  1A9 00008960 GetSysColorBrush
       1933  1AA 00017420 GetSystemMenu
       1934  1AB 000035A0 GetSystemMetrics
       1935  1AC 00051564 GetTabbedTextExtentA
       1936  1AD 00051660 GetTabbedTextExtentW
       1937  1AE 0002ABA0 GetTaskmanWindow
       1938  1AF 00003300 GetThreadDesktop
       1939  1B0 0000BD50 GetTitleBarInfo
       1940  1B1 00040520 GetTopLevelWindow
       1941  1B2 0002ED00 GetTopWindow
       1942  1B3 0004A1C0 GetTouchInputInfo
       1943  1B4 000478B4 GetUnpredictedMessagePos
       1944  1B5 0002F200 GetUpdateRect
       1945  1B6 000311C0 GetUpdateRgn
       1946  1B7 00040550 GetUpdatedClipboardFormats
       1947  1B8 0002F690 GetUserObjectInformationA
       1948  1B9 00005240 GetUserObjectInformationW
       1949  1BA 00048320 GetUserObjectSecurity
       1950  1BB 00048310 GetWinStationInfo
       1951  1BC 00007EC0 GetWindow
       1952  1BD 00003210 GetWindowBand
       1953  1BE 00005120 GetWindowCompositionAttribute
       1954  1BF 00040570 GetWindowCompositionInfo
       1955  1C0 000477BC GetWindowContextHelpId
       1956  1C1 00005130 GetWindowDC
       1957  1C2 00040580 GetWindowDisplayAffinity
       1958  1C3 00028130 GetWindowFeedbackSetting
       1959  1C4 0000B900 GetWindowInfo
       1960  1C5 0000F890 GetWindowLongA
       1961  1C6 00002E20 GetWindowLongPtrA
       1962  1C7 00002140 GetWindowLongPtrW
       1963  1C8 00004ED0 GetWindowLongW
       1964  1C9 000143C0 GetWindowMinimizeRect
       1965  1CA 0007800C GetWindowModuleFileName
       1966  1CB 0007800C GetWindowModuleFileNameA
       1967  1CC 00048B10 GetWindowModuleFileNameW
       1968  1CD 0000A750 GetWindowPlacement
       1969  1CE 00004350 GetWindowRect
       1970  1CF 000153E0 GetWindowRgn
       1971  1D0 0000AF20 GetWindowRgnBox
       1972  1D1 00008900 GetWindowRgnEx
       1973  1D2 00018800 GetWindowTextA
       1974  1D3 0007827C GetWindowTextLengthA
       1975  1D4 0000EA80 GetWindowTextLengthW
       1976  1D5 0000A030 GetWindowTextW
       1977  1D6 00003140 GetWindowThreadProcessId
       1978  1D7 000763E4 GetWindowWord
       1979  1D8 0000B5D0 GhostWindowFromHungWindow
       1980  1D9 000483B0 GrayStringA
       1981  1DA 00048360 GrayStringW
       1982  1DB 0000E950 HideCaret
       1983  1DC 000405A0 HiliteMenuItem
       1984  1DD 00032230 HungWindowFromGhostWindow
       1985  1DE 00079280 IMPGetIMEA
       1986  1DF 00079290 IMPGetIMEW
       1987  1E0 00079260 IMPQueryIMEA
       1988  1E1 00079270 IMPQueryIMEW
       1989  1E2 00079240 IMPSetIMEA
       1990  1E3 00079250 IMPSetIMEW
       1991  1E4 000405B0 ImpersonateDdeClientWindow
       1992  1E5 0000E260 InSendMessage
       1993  1E6 00014B80 InSendMessageEx
       1994  1E7 00004A50 InflateRect
       1995  1E8 00005F70 InitializeLpkHooks
       1996  1E9 0002DEF0 InitializeTouchInjection
       1997  1EA 0002DEC0 InjectTouchInput
       1998  1EB 00078544 InsertMenuA
       1999  1EC 000780A4 InsertMenuItemA
       2000  1ED 0002FCF0 InsertMenuItemW
       2003  1EE 00030F60 InsertMenuW
       2004  1EF 00044C60 InternalGetWindowIcon
       2006  1F0 000051F0 InternalGetWindowText
       2007  1F1 000023B0 IntersectRect
       2008  1F2 00004A20 InvalidateRect
       2009  1F3 0000E330 InvalidateRgn
       2011  1F4 0007B110 InvertRect
       2012  1F5 00079BB8 IsCharAlphaA
       2013  1F6 00079BC8 IsCharAlphaNumericA
       2014  1F7 0000B860 IsCharAlphaNumericW
       2015  1F8 00015970 IsCharAlphaW
       2016  1F9 00079C18 IsCharLowerA
       2017  1FA 00079C38 IsCharLowerW
       2018  1FB 00079C08 IsCharUpperA
       2019  1FC 00079C28 IsCharUpperW
       2020  1FD 000084B0 IsChild
       2021  1FE 0002F3E0 IsClipboardFormatAvailable
       2022  1FF 00053B30 IsDialogMessage
       2023  200 00053B30 IsDialogMessageA
       2024  201 00015F50 IsDialogMessageW
       2025  202 0002DC10 IsDlgButtonChecked
       2026  203 00011260 IsGUIThread
       2027  204 00018720 IsHungAppWindow
       2028  205 0000BBC0 IsIconic
       2029  206 0000A6C0 IsImmersiveProcess
       2030  207 0003CA70 IsInDesktopWindowBand
       2031  208 0002F500 IsMenu
       2032  209 00040600 IsMouseInPointerEnabled
       2033  20A 00005150 IsProcessDPIAware
       2034  20B 000478A4 IsQueueAttached
       2035  20C 00003D60 IsRectEmpty
       2036  20D 0003D900 IsSETEnabled
       2037  20E 000148E0 IsServerSideWindow
       2038  20F 00001070 IsThreadDesktopComposited
       2528  210 000034A0 IsThreadMessageQueueAttached
       2039  211 0000E310 IsTopLevelWindow
       2040  212 00028140 IsTouchWindow
       2041  213 00015100 IsWinEventHookInstalled
       2042  214 00002290 IsWindow
       2043  215 00015770 IsWindowEnabled
       2044  216 000088A0 IsWindowInDestroy
       2045  217 0000A400 IsWindowRedirectedForPrint
       2046  218 00007DB0 IsWindowUnicode
       2047  219 00008710 IsWindowVisible
       2048  21A 00048E18 IsWow64Message
       2049  21B 0000BCC0 IsZoomed
       2050  21C 00001FD0 KillTimer
       2051  21D 00049D58 LoadAcceleratorsA
       2052  21E 00012590 LoadAcceleratorsW
       2053  21F 000224E0 LoadBitmapA
       2054  220 0001EEF0 LoadBitmapW
       2055  221 000111E0 LoadCursorA
       2056  222 00045410 LoadCursorFromFileA
       2057  223 00045474 LoadCursorFromFileW
       2058  224 0000AD70 LoadCursorW
       2059  225 0003D760 LoadIconA
       2060  226 0000C870 LoadIconW
       2061  227 0001F4F0 LoadImageA
       2062  228 0000B610 LoadImageW
       2063  229 00047670 LoadKeyboardLayoutA
       2064  22A 000476EC LoadKeyboardLayoutEx
       2065  22B 000288D0 LoadKeyboardLayoutW
       2066  22C 0003B8D0 LoadLocalFonts
       2067  22D 00048D68 LoadMenuA
       2068  22E 000173E0 LoadMenuIndirectA
       2069  22F 000173E0 LoadMenuIndirectW
       2070  230 00017440 LoadMenuW
       2071  231 0003D7F0 LoadRemoteFonts
       2072  232 00049CD0 LoadStringA
       2073  233 00005280 LoadStringW
       2074  234 00032270 LockSetForegroundWindow
       2075  235 0002A920 LockWindowStation
       2076  236 0003E580 LockWindowUpdate
       2077  237 0002A9A0 LockWorkStation
       2078  238 00008330 LogicalToPhysicalPoint
       2079  239 000498F4 LookupIconIdFromDirectory
       2080  23A 0001AC10 LookupIconIdFromDirectoryEx
       2081  23B 0007BE90 MBToWCSEx
       2082  23C 00003900 MBToWCSExt
       2083  23D 0006FD50 MB_GetString
       2084  23E 0002BEC0 MapDialogRect
       2085  23F 00078F1C MapVirtualKeyA
       2086  240 00078E3C MapVirtualKeyExA
       2087  241 0002F8A0 MapVirtualKeyExW
       2088  242 0000A860 MapVirtualKeyW
       2089  243 000043F0 MapWindowPoints
       2090  244 00040670 MenuItemFromPoint
       2091  245 00048E48 MenuWindowProcA
       2092  246 00048EB4 MenuWindowProcW
       2093  247 0002C8A0 MessageBeep
       2094  248 00070334 MessageBoxA
       2095  249 00070310 MessageBoxExA
       2096  24A 000702EC MessageBoxExW
       2097  24B 00070020 MessageBoxIndirectA
       2098  24C 00026890 MessageBoxIndirectW
       2099  24D 0007019C MessageBoxTimeoutA
       2100  24E 00070638 MessageBoxTimeoutW
       2101  24F 00070720 MessageBoxW
       2102  250 00078474 ModifyMenuA
       2103  251 000247F0 ModifyMenuW
       2104  252 0002F010 MonitorFromPoint
       2105  253 0000A330 MonitorFromRect
       2106  254 00009640 MonitorFromWindow
       2107  255 0000DED0 MoveWindow
       2108  256 00003090 MsgWaitForMultipleObjects
       2109  257 000012A0 MsgWaitForMultipleObjectsEx
       2110  258 00047890 NotifyOverlayWindow
       2111  259 00001A40 NotifyWinEvent
       2112  25A 000714B0 OemKeyScan
       2113  25B 0007171C OemToCharA
       2114  25C 00071630 OemToCharBuffA
       2115  25D 000716D0 OemToCharBuffW
       2116  25E 00071528 OemToCharW
       2117  25F 00002380 OffsetRect
       2118  260 0002D850 OpenClipboard
       2119  261 00018B80 OpenDesktopA
       2120  262 00018680 OpenDesktopW
       2121  263 00047858 OpenIcon
       2122  264 0002E490 OpenInputDesktop
       2123  265 000406A0 OpenThreadDesktop
       2124  266 000189C0 OpenWindowStationA
       2125  267 00018430 OpenWindowStationW
       2126  268 00052FC4 PackDDElParam
       2127  269 0001EB60 PackTouchHitTestingProximityEvaluation
       2128  26A 0007077C PaintDesktop
       2129  26B 0002F600 PaintMenuBar
       2130  26C 000406B0 PaintMonitor
       2131  26D 00005570 PeekMessageA
       2132  26E 000010C0 PeekMessageW
       2133  26F 00015400 PhysicalToLogicalPoint
       2134  270 00015060 PostMessageA
       2135  271 000024A0 PostMessageW
       2136  272 0000E050 PostQuitMessage
       2137  273 00016CE0 PostThreadMessageA
       2138  274 00014BE0 PostThreadMessageW
       2139  275 000406C0 PrintWindow
       2140  276 00062B0C PrivateExtractIconExA
       2141  277 00017D30 PrivateExtractIconExW
       2142  278 00062A60 PrivateExtractIconsA
       2143  279 00017E90 PrivateExtractIconsW
       2144  27A 00025A40 PrivateRegisterICSProc
       2145  27B 0000A560 PtInRect
       2146  27C 000406E0 QueryBSDRWindow
       2147  27D 0000DAC0 QueryDisplayConfig
       2148  27E 00040710 QuerySendMessage
       2149  27F 00040720 RealChildWindowFromPoint
       2150  280 0007876C RealGetWindowClass
       2151  281 0007876C RealGetWindowClassA
       2152  282 00008300 RealGetWindowClassW
       2153  283 00072404 ReasonCodeNeedsBugID
       2154  284 00072414 ReasonCodeNeedsComment
       2155  285 0003D000 RecordShutdownReason
       2156  286 000033B0 RedrawWindow
       2157  287 0002A990 RegisterBSDRWindow
       2158  288 000164D0 RegisterClassA
       2159  289 000781D0 RegisterClassExA
       2160  28A 0000C8D0 RegisterClassExW
       2161  28B 0000D240 RegisterClassW
       2162  28C 0000B350 RegisterClipboardFormatA
       2163  28D 0000B260 RegisterClipboardFormatW
       2164  28E 0002E170 RegisterDeviceNotificationA
       2165  28F 0002E170 RegisterDeviceNotificationW
       2166  290 00040740 RegisterErrorReportingDialog
       2167  291 00047600 RegisterFrostWindow
       2168  292 00044C70 RegisterGhostWindow
       2169  293 000112F0 RegisterHotKey
       2170  294 0002A970 RegisterLogonProcess
       2171  295 00030BA0 RegisterMessagePumpHook
       2172  296 0002E4E0 RegisterPointerDeviceNotifications
       2173  297 0004951C RegisterPointerInputTarget
       2174  298 00030790 RegisterPowerSettingNotification
       2175  299 00015420 RegisterRawInputDevices
       2176  29A 00040760 RegisterServicesProcess
       2177  29B 0003B930 RegisterSessionPort
       2178  29C 0002E470 RegisterShellHookWindow
       2179  29D 00070A1C RegisterSuspendResumeNotification
       2180  29E 00047788 RegisterSystemThread
       2181  29F 00040770 RegisterTasklist
       2182  2A0 00011180 RegisterTouchHitTestingWindow
       2183  2A1 0002F4D0 RegisterTouchWindow
       2184  2A2 0003B7C0 RegisterUserApiHook
       2185  2A3 0000B350 RegisterWindowMessageA
       2186  2A4 0000B260 RegisterWindowMessageW
       2187  2A5 00015EC0 ReleaseCapture
       2188  2A6 00003D10 ReleaseDC
       2189  2A7 0002D920 RemoveClipboardFormatListener
       2190  2A8 0002FEA0 RemoveMenu
       2191  2A9 00078C7C RemovePropA
       2192  2AA 00003FD0 RemovePropW
       2193  2AB 0002DEE0 ReplyMessage
       2194  2AC 000407C0 ResolveDesktopForWOW
       2195  2AD 00052F10 ReuseDDElParam
       2196  2AE 0000DBC0 ScreenToClient
       2197  2AF 0006DAB8 ScrollChildren
       2198  2B0 00001AE0 ScrollDC
       2199  2B1 000487C8 ScrollWindow
       2200  2B2 0001E490 ScrollWindowEx
       2201  2B3 0007833C SendDlgItemMessageA
       2202  2B4 0002B070 SendDlgItemMessageW
       2203  2B5 000792A0 SendIMEMessageExA
       2204  2B6 000792B0 SendIMEMessageExW
       2205  2B7 0000A5C0 SendInput
       2206  2B8 0002F290 SendMessageA
       2207  2B9 00078C00 SendMessageCallbackA
       2208  2BA 00014E90 SendMessageCallbackW
       2209  2BB 0001F100 SendMessageTimeoutA
       2210  2BC 00002D40 SendMessageTimeoutW
       2211  2BD 00004760 SendMessageW
       2212  2BE 00023270 SendNotifyMessageA
       2213  2BF 0000A700 SendNotifyMessageW
       2214  2C0 00014F80 SetActiveWindow
       2215  2C1 00015ED0 SetCapture
       2216  2C2 000138C0 SetCaretBlinkTime
       2217  2C3 0000E970 SetCaretPos
       2218  2C4 00078D04 SetClassLongA
       2219  2C5 00078D18 SetClassLongPtrA
       2220  2C6 0002DC40 SetClassLongPtrW
       2221  2C7 0002DBD0 SetClassLongW
       2222  2C8 000407F0 SetClassWord
       2223  2C9 00029D40 SetClipboardData
       2224  2CA 000249E0 SetClipboardViewer
       2225  2CB 00001FF0 SetCoalescableTimer
       2226  2CC 0000DD70 SetCursor
       2227  2CD 00040800 SetCursorContents
       2228  2CE 00013250 SetCursorPos
       2229  2CF 00047638 SetDebugErrorLevel
       2230  2D0 00048984 SetDeskWallpaper
       2231  2D1 00012BD0 SetDisplayAutoRotationPreferences
       2232  2D2 00079C70 SetDisplayConfig
       2233  2D3 0002B4C0 SetDlgItemInt
       2234  2D4 000782C8 SetDlgItemTextA
       2235  2D5 0002C2F0 SetDlgItemTextW
       2236  2D6 00047774 SetDoubleClickTime
       2237  2D7 000086C0 SetFocus
       2238  2D8 0000DD60 SetForegroundWindow
       2239  2D9 0002F090 SetGestureConfig
       2240  2DA 0002AB70 SetImmersiveBackgroundWindow
       2241  2DB 00040840 SetInternalWindowPos
       2242  2DC 00011320 SetKeyboardState
       2243  2DD 00071760 SetLastErrorEx
       2244  2DE 0000E190 SetLayeredWindowAttributes
       2245  2DF 0006C684 SetMagnificationDesktopColorEffect
       2246  2E0 0006C54C SetMagnificationDesktopMagnification
       2247  2E1 00040660 SetMagnificationLensCtxInformation
       2248  2E2 00013A40 SetMenu
       2249  2E3 00040850 SetMenuContextHelpId
       2250  2E4 00031030 SetMenuDefaultItem
       2251  2E5 0006E804 SetMenuInfo
       2252  2E6 0006E520 SetMenuItemBitmaps
       2253  2E7 00078114 SetMenuItemInfoA
       2254  2E8 00017C40 SetMenuItemInfoW
       2255  2E9 00048E38 SetMessageExtraInfo
       2256  2EA 0000A3D0 SetMessageQueue
       2257  2EB 00040870 SetMirrorRendering
       2258  2EC 0000E630 SetParent
       2259  2ED 00022D20 SetPhysicalCursorPos
       2260  2EE 0000B730 SetProcessDPIAware
       2261  2EF 00047624 SetProcessDefaultLayout
       2262  2F0 00040890 SetProcessRestrictionExemption
       2263  2F1 00018270 SetProcessWindowStation
       2264  2F2 000477E0 SetProgmanWindow
       2265  2F3 00078B68 SetPropA
       2266  2F4 00004C70 SetPropW
       2267  2F5 00004DE0 SetRect
       2268  2F6 00004E10 SetRectEmpty
       2269  2F7 0000BDD0 SetScrollInfo
       2270  2F8 0002D1D0 SetScrollPos
       2271  2F9 0001E3D0 SetScrollRange
       2272  2FA 00047848 SetShellWindow
       2273  2FB 0002AB80 SetShellWindowEx
       2274  2FC 0002A940 SetSysColors
       2275  2FD 00071780 SetSysColorsTemp
       2276  2FE 00070B74 SetSystemCursor
       2277  2FF 0003E590 SetSystemMenu
       2278  300 0002AB00 SetTaskmanWindow
       2279  301 0000B500 SetThreadDesktop
       2280  302 0000E650 SetThreadInputBlocked
       2281  303 00002010 SetTimer
       2282  304 00040880 SetUserObjectInformationA
       2283  305 00040880 SetUserObjectInformationW
       2284  306 0003BA90 SetUserObjectSecurity
       2285  307 00012F70 SetWinEventHook
       2286  308 00012BB0 SetWindowBand
       2287  309 00014960 SetWindowCompositionAttribute
       2288  30A 00012B00 SetWindowCompositionTransition
       2289  30B 000477CC SetWindowContextHelpId
       2290  30C 000408F0 SetWindowDisplayAffinity
       2291  30D 0002FD60 SetWindowFeedbackSetting
       2292  30E 00013730 SetWindowLongA
       2293  30F 0000B5F0 SetWindowLongPtrA
       2294  310 000148D0 SetWindowLongPtrW
       2295  311 00008B10 SetWindowLongW
       2296  312 00013660 SetWindowPlacement
       2297  313 00008190 SetWindowPos
       2298  314 000098A0 SetWindowRgn
       2299  315 0002C470 SetWindowRgnEx
       2300  316 0003BE30 SetWindowStationUser
       2301  317 00078210 SetWindowTextA
       2302  318 00007430 SetWindowTextW
       2303  319 0003E4F0 SetWindowWord
       2304  31A 000474F0 SetWindowsHookA
       2305  31B 00031850 SetWindowsHookExA
       2306  31C 0000BEE0 SetWindowsHookExW
       2307  31D 000474E0 SetWindowsHookW
       2308  31E 0000E940 ShowCaret
       2309  31F 0002A910 ShowCursor
       2310  320 0001E570 ShowOwnedPopups
       2311  321 00011390 ShowScrollBar
       2312  322 00047760 ShowStartGlass
       2313  323 00040900 ShowSystemCursor
       2314  324 00014AE0 ShowWindow
       2315  325 0003E650 ShowWindowAsync
       2316  326 0002D2F0 ShutdownBlockReasonCreate
       2317  327 0002D2D0 ShutdownBlockReasonDestroy
       2318  328 0003C890 ShutdownBlockReasonQuery
       2319  329 0003D8C0 SignalRedirectionStartComplete
       2320  32A 00040320 SkipPointerFrameMessages
       2321  32B 00026B10 SoftModalMessageBox
       2322  32C 00040920 SoundSentry
       2323  32D 0002EC40 SubtractRect
       2324  32E 0004774C SwapMouseButton
       2325  32F 0002A8C0 SwitchDesktop
       2326  330 0002A900 SwitchDesktopWithFade
       2327  331 00032220 SwitchToThisWindow
       2328  332 000124C0 SystemParametersInfoA
       2329  333 00004120 SystemParametersInfoW
       2330  334 000516A4 TabbedTextOutA
       2331  335 000517B4 TabbedTextOutW
       2332  336 00047728 TileChildWindows
       2333  337 0006E474 TileWindows
       2334  338 00048904 ToAscii
       2335  339 00048820 ToAsciiEx
       2336  33A 000712B8 ToUnicode
       2337  33B 0002F770 ToUnicodeEx
       2338  33C 00008910 TrackMouseEvent
       2339  33D 0002A0C0 TrackPopupMenu
       2340  33E 0002CD00 TrackPopupMenuEx
       2341  33F 000489A0 TranslateAccelerator
       2342  340 000489A0 TranslateAcceleratorA
       2343  341 00001FA0 TranslateAcceleratorW
       2344  342 0006E2F0 TranslateMDISysAccel
       2345  343 000011C0 TranslateMessage
       2346  344 000038A0 TranslateMessageEx
       2347  345 0000E030 UnhookWinEvent
       2348  346 00047714 UnhookWindowsHook
       2349  347 00002120 UnhookWindowsHookEx
       2350  348 00015240 UnionRect
       2351  349 00047644 UnloadKeyboardLayout
       2352  34A 0002A8E0 UnlockWindowStation
       2353  34B 00053814 UnpackDDElParam
       2354  34C 00016A40 UnregisterClassA
       2355  34D 00014C10 UnregisterClassW
       2356  34E 0002E130 UnregisterDeviceNotification
       2357  34F 00011330 UnregisterHotKey
       2358  350 00030CE0 UnregisterMessagePumpHook
       2359  351 0004950C UnregisterPointerInputTarget
       2360  352 000304F0 UnregisterPowerSettingNotification
       2361  353 0003B6E0 UnregisterSessionPort
       2362  354 000709EC UnregisterSuspendResumeNotification
       2363  355 000709DC UnregisterTouchWindow
       2364  356 00040950 UnregisterUserApiHook
       2365  357 00040960 UpdateDefaultDesktopThumbnail
       2366  358 00012AA0 UpdateLayeredWindow
       2367  359 0002EB30 UpdateLayeredWindowIndirect
       2368  35A 0003BC30 UpdatePerUserSystemParameters
       2369  35B 0000B530 UpdateWindow
       2370  35C 00040980 UpdateWindowTransform
       2371  35D 00006B50 User32InitializeImmEntryTable
       2372  35E 000057B0 UserClientDllInitialize
       2373  35F 00040990 UserHandleGrantAccess
       2374  360 00051E54 UserLpkPSMTextOut
       2375  361 00051BB8 UserLpkTabbedTextOut
       2376  362 0002EBA0 UserRealizePalette
       2377  363 00047A80 UserRegisterWowHandlers
       2378  364 0000A3E0 VRipOutput
       2379  365 0000A3E0 VTagOutput
       2380  366 0000E1A0 ValidateRect
       2381  367 00003A30 ValidateRgn
       2382  368 00078B14 VkKeyScanA
       2383  369 00078A64 VkKeyScanExA
       2384  36A 00015AD0 VkKeyScanExW
       2385  36B 00015AC0 VkKeyScanW
       2386  36C 0000F9C0 WCSToMBEx
       2387  36D 000792D0 WINNLSEnableIME
       2388  36E 000792C0 WINNLSGetEnableStatus
       2389  36F 0000A3E0 WINNLSGetIMEHotkey
       2390  370 0002EE90 WaitForInputIdle
       2391  371 000409B0 WaitForRedirectionStartComplete
       2392  372 000029A0 WaitMessage
       2393  373 00022010 WinHelpA
       2394  374 00021F50 WinHelpW
       2395  375 00014AD0 WindowFromDC
       2396  376 0000A5D0 WindowFromPhysicalPoint
       2397  377 00008AE0 WindowFromPoint
       2398  378 000752DC _UserTestTokenForInteractive
       2399  379 0009DB00 gSharedInfo
       2400  37A 000388B0 gapfnScSendMessage
       2401  37B 00070B28 keybd_event
       2402  37C 00014370 mouse_event
       2403  37D 00031B00 wsprintfA
       2404  37E 00022920 wsprintfW
       2405  37F 00031B90 wvsprintfA
       2406  380 00022860 wvsprintfW
       1502      0004A0B0 [NONAME]
       1550      00072490 [NONAME]
       1551      00072424 [NONAME]
       1552      0007244C [NONAME]
       1553      00031A20 [NONAME]
       1554      00031A80 [NONAME]
       2001      0006C444 [NONAME]
       2002      0006C3A8 [NONAME]
       2005      0002AB40 [NONAME]
       2010      00040910 [NONAME]
       2503      00011240 [NONAME]
       2504      0000A7F0 [NONAME]
       2505      0001E9C0 [NONAME]
       2506      00046D74 [NONAME]
       2507      000322B0 [NONAME]
       2508      00028150 [NONAME]
       2509      0002AB50 [NONAME]
       2510      00009A30 [NONAME]
       2511      00012B40 [NONAME]
       2512      00012BC0 [NONAME]
       2513      00009A40 [NONAME]
       2514      0002F1C0 [NONAME]
       2515      0002F1B0 [NONAME]
       2516      0001EBD0 [NONAME]
       2517      00040540 [NONAME]
       2518      00030160 [NONAME]
       2519      0002A860 [NONAME]
       2520      00040610 [NONAME]
       2522      0002AB60 [NONAME]
       2523      00012D20 [NONAME]
       2524      0002C0B0 [NONAME]
       2525      0003D840 [NONAME]
       2526      00046D48 [NONAME]
       2527      0003B780 [NONAME]
       2529      00030CC0 [NONAME]
       2530      00001FC0 [NONAME]
       2531      000407E0 [NONAME]
       2532      00040820 [NONAME]
       2533      00012B80 [NONAME]
       2534      00031100 [NONAME]
       2535      00044C10 [NONAME]
       2536      00030800 [NONAME]
       2537      00012BA0 [NONAME]
       2538      000322C0 [NONAME]
       2539      0001EBE0 [NONAME]
       2540      00012B20 [NONAME]
       2541      00012BE0 [NONAME]

  Summary

        2000 .data
        4000 .idata
        F000 .pdata
        1000 .reloc
       99000 .rsrc
       9C000 .text

Saturday, April 27, 2013

IntelliJ IDEA and the greatness of the PSI

Since this is the third post about IntelliJ IDEA, it is very clear that I am very enthusiastic about it.

I compared it to my all-time greatest IDE, Visual Studio here: http://mazdev.blogspot.com/2012/11/intellij-idea-code-generation.html where I mentioned it's ability to to navigate XML files in a manner similar to navigating code files. Ctrl+Click goes to a related element in XSL or XML. In XML an example would be going to the class referred to like com.mazin.product.component.SomeClass. So a Ctrl+Click on SomeClass here would send the user to SomeClass.java or a view of the .class.

As I dug into IntelliJ in the past few months, I realized that IntelliJ uses Program Structure Interface (PSI) as an infrastructure for much of it's intelligent (or rather, intellijent) refactoring, code generation, navigation, transformation design-time and development tools.

PSI is a semantic layer that is build on top of a the abstract syntax tree layer. It provides common functionality features such as renaming, finding usages, resolution, etc.

[write more about how cool PSI is]

Creating a language in IntelliJ, and really integrating it in the IDE is an easy and fun task:


  1. Design the language
  2. Create a Lexer (use IntelliJ's idea-flex.skeleton) to generate a compatible lexer.
  3. Use Grammar-kit plugin to generate PSI elements from a BNF grammar.
  4. Actually here's the tutorial: Custom Language Support


Although VSXtra makes things much easier regarding extending Visual Studio, IntelliJ is more fun since you can get stuck in lots of places with Visual Studio, especially when you get a mysterious COM Exception!

Wednesday, April 17, 2013

Dynamic SQL Query with MS SQL

I'm currently working on a big, actually, huge legacy software system whose database schema, with over 500 tables, isn't documented.

Sometimes I wonder where a piece of information comes from in this intricate and giant software machine. I found myself in many circumstances in which I wanted to search the whole database, all tables, all rows for a value in order to know where it comes from.

For examples imagine you don't know much about the database and its 500 tables but you know it contains the value 1992281, representing some form of an ID.

The idea, then, is to:
  1. Find tables with a column whose name is LIKE '%id%'
  2. Find rows whose column value (converted to a string), is equal to, or LIKE (if you want to use wildcards), '1992281'
This is not for production, unless you don't have really good design (or extra-terrestrially complex software). That is because SQL queries should be much more efficient and simpler in production code which should be written by someone who understands the system.

DECLARE @SQLQuery NVARCHAR(MAX);
DECLARE @tempSQLQuery NVARCHAR(MAX);
DECLARE @tableName NVARCHAR(MAX), @colName NVARCHAR(MAX);

column_name like ''%rel%'''

DECLARE relCols CURSOR FOR
                SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
                WHERE table_schema = schema_name() AND column_name LIKE '%id%'

OPEN relCols;
FETCH NEXT FROM relCols INTO @tableName, @colName;
WHILE @@FETCH_STATUS = 0
   BEGIN
   SET @tempSQLQuery = 'SELECT ''' + @tableName + ''' TableName, * FROM ' + @tableName + ' WHERE CAST(' + @colName + ' AS NVARCHAR) = ''1992281''' ;
   exec sp_executesql @tempSQLQuery;
  
      FETCH NEXT FROM relCols INTO @tableName, @colName;
   END;
CLOSE relCols;
DEALLOCATE relCols;
GO

So as you can see, this can be done by constructing a query based on what is contained in the INFORMATION_SCHEMA.COLUMNS table.

I just discovered that MS Sql Server Management Studio has a feature to 'Display Estimated Execution Plan'  (find it in the context menu in the SQL editor) that shows you a diagram of the steps that will be involved during execution of the SQL you typed. It also has detailed estimations such as average row size in bytes, CPU consumption, and numbers of executions!

That's my first dynamic sql query!

Inevitable leadership [article is a work in progress]


I currently work for a great company, in a newly created office and within a young team.

I have been working with technologies that are new to me and I have been enthusiastically discovering and comparing them to what my previous experience (See C# vs Java blog) for a few months now. I have lots of things to learn about our huge system but I already know, with strong belief, that we need to reconsider our software development strategies. I'll get to what I mean by that in a moment.

I am a developer, I love it, and I prefer to remain in this analytic and technical position forever; as I am not really a people's person and so I prefer not to manage others. I prefer to delegate administrative tasks to my manager and his/her assistant. But I also care about my performance, and others' a lot, and this is where my preferences are challenged and I have to go beyond my skill set as a developer and start dealing with a structure (or semi-structure) that involves code and many people writing code into a single system.

It seems that social interaction is very important in making change with all the subtleties involved in human behavior, feelings, motivation and all this psychology-related things that I am not experienced to deal with. People, even many programmers who are supposed to be logic-oriented agents, do not react solely according to their perception of what's right and wrong or what's better for the team or not.

It looks like we are in a loop of hardship. There are tons of work to be done, so there isn't time to reconsider our software development strategies and/or build tools that will allow us to work more efficiently. Of course that's an invalid reason, but instead there are 3 factors for the real reason behind our pretense of the validity of the former: 1- We need to fix the bugs, not create science-fiction-like bug-fixers. (The sense of being overwhelmed by work makes not want to add any burden and i believe it to be agreeable that creating development tools and reconsidering strategies is a tough task) 2-People are used to what they do now. (I surely don't want to get to that point, and it's not going to happen because I constantly reflect on my actions and try to evaluate whether what I am doing could be done by a program) 3-

What I aim for is to capture and automate patterns. And this must be a long term goal for many reasons 1-I am new to the company. 2-There are many people working on this product and they are scattered geographically. 3-The system is huge, sophisticated and the tasks require time to be effectively detected and summarized into a pattern-representation. 4-The inherent nature of many people to resist change and this is a widely talked about topic: everyone knows that if people are comfortable they would feel less comfortable to change how things go.

One very effective way to dealing with this is to delegate the organization of change to managers. They have authority and people are used to listening to them. Cheer-leading in this case is an optional luxury.

There is also the important problem of Bug Loops. I was exposed to many scenarios where a fix of a bug caused side-effects that invalidated a solution to another previous bug. Now people must have checked but also a system must be able to detect of whether a change 'might' affect other bugs and suggest that the the person making changes rechecks that the previous solutions hasn't been affected. In a workplace with lots of work, there should be a automated process assisting developers not to make mistakes, because software developers, just like CEOs are busy and need secretaries. I suggest that these secretaries be customized, business-field oriented, developer tools.

Thursday, March 7, 2013

Subversion! Love and Hate (but mostly frustration)

Subversion is like that really annoying level in a game that you really like. You haven't experienced much of the game yet because this early level is blocking your way. So you really need to go through the suffering.

I work within a team that tracks development using SVN and we have multiple branches and we regularly use svn merge. After accidentally updating to SVN 1.7 my life became much harder and for some reason change-detection stopped working for one of my projects from within IntelliJ IDEA's Subversion plugin. It just says: "Error updating changes: svn: E155016: No REPOSITORY table entry for id '2'" and when I searched for that online, it felt so lonely as I only found Apache's source code repository showing the code. That would have helped if I had time to look through how Subversion's code worked.

I had to learn how to use svn from the command line. I was so against this because the GUI is easier, friendlier and works fine. But I don't want to invest time looking for a good GUI svn client on Linux. The one on IntelliJ IDEA works well (except on one project as I mentioned above).

After updating, it asked me to update my repository's version. svn upgrade. Cool.

I remember going through lots of problems, the exploration of which was greatly aided by a free ebook called Version Control with Subversion found at http://svnbook.red-bean.com/ (thanks to the Authors and O'Reilly Media)!

One of the most tricky for me as a SVN outsider (read: NOOB) was the message:

"svn: E195020: Cannot merge into mixed-revision working copy [X:Y]; try updating first"

This is new in SVN 1.7

I thought I needed to update the source branch. After a few attempts (spanning days, because I used to resort to merging the trunk and branches manually) I realized that I needed to update the TRUNK. This is my latest finding and I am having doubts that this is the full explanation.

SVN is a very much needed tool (I don't know about Git but some say, that is, my friends, that Git is better and less annoying). SVN has lots of details that could become a burden to the developer who needs and wants to write code, not spend the time figuring out how code-maintenance tools work.

Update:

I just got this, when I svn commit:

svn: E205005: The log message is a pathname (was -F intended?); use '--force-log' to override

I'm not sure if this is new to 1.7, but saved me from frustration! :) I dislike it when copying into the terminal automatically inserts Return (and as thus automatically issues a command you might still be composing)!