1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> Linux Gazette Table of Contents LG #78</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
ALINK="#FF0000" >
<center>
<!-- A HREF="http://www.linuxgazette.com/">
<H1><IMG SRC="../gx/newlogo.jpg" ALT="LINUX GAZETTE" border="0"></H1></A> -->
<A HREF="http://www.linuxgazette.com/">
<H1><IMG ALT="LINUX GAZETTE" SRC="../gx/lglogo.png"
WIDTH="600" HEIGHT="124" border="0"></H1></A>
<H2>May 2002, Issue 78
Published by <I>Linux Journal</I></H2>
<A HREF="../index.html">Front Page</A> |
<A HREF="../index.html">Back Issues</A> |
<A HREF="../lg_faq.html">FAQ</A> |
<A HREF="../mirrors.html">Mirrors</A> <!-- | --><BR>
<A HREF="../tag-kb.html">The Answer Gang knowledge base</A> (your Linux questions here!) <!-- | --><BR>
<A HREF="http://www.linuxgazette.com/search.html">Search (www.linuxgazette.com)</A>
<!-- *** BEGIN mirror site search link *** -->
<!-- <A HREF="http://www.linuxgazette.com/search.html">(SITE.COM
mirror)</A> -->
<!-- *** END mirror site search link *** -->
</CENTER>
<HR NOSHADE>
<!--=================================================================-->
<!-- H1><font color="#BB0000">Table of Contents:</font></H1 -->
<!-- *** BEGIN toc *** -->
<UL>
<LI> <a HREF="lg_mail.html">The MailBag</A>
<LI> <a HREF="lg_tips.html">More 2-Cent Tips</A>
<LI> <a HREF="lg_answer.html">The Answer Gang</A>
<LI> <a HREF="lg_bytes.html">News Bytes</A>
<LI> <a HREF="adam.html">The Weekend Mechanic</A> , <EM>by Thomas Adam</EM>
<LI> <a HREF="alcidi.html">Linux User Caricatures</A> , <EM>by Franck Alcidi</EM>
<LI> <a HREF="collinge.html">Help Dex</A> , <EM>by Shane Collinge</EM>
<LI> <a HREF="holm.html">A Trip Down Hypermedia Lane</A> , <EM>by Ronnie Holm</EM>
<LI> <a HREF="krishnakumar.html">Rapid application development using PyGTK</A> , <EM>by Krishnakumar R.</EM>
<LI> <a HREF="qubism.html">Qubism</A> , <EM>by Jon "Sir Flakey" Harsem</EM>
<LI> <a HREF="taneja.html">GUI Programming in C++ using the Qt Library, part 1</A> , <EM>by Gaurav Taneja</EM>
<LI> <a HREF="tougher.html">Xlib Programming in C++</A> , <EM>by Rob Tougher</EM>
<LI> <a HREF="lg_backpage.html">The Back Page</A>
</UL>
<!-- *** END toc *** -->
<HR NOSHADE>
<!--=================================================================-->
<H3 ALIGN="center"><EM>Linux Gazette</EM> Staff and The Answer Gang</H3>
<BLOCKQUOTE>
<STRONG>Editor:</STRONG> Michael Orr<BR>
<STRONG>Technical Editor:</STRONG> Heather Stern<BR>
<STRONG>Senior Contributing Editor:</STRONG> Jim Dennis<BR>
<STRONG>Contributing Editors:</STRONG>
Ben Okopnik, Dan Wilder, Don Marti
</BLOCKQUOTE>
<HR NOSHADE>
<!--=================================================================-->
<A HREF="TWDT.txt.gz">TWDT 1 (gzipped text file)</A><BR>
<A HREF="TWDT.html">TWDT 2 (HTML file)</A><BR>
are files containing the entire issue: one in text format, one in HTML.
They are provided
strictly as a way to save the contents as one file for later printing in
the format of your choice;
there is no guarantee of working links in the HTML version.
<HR NOSHADE>
<!--=================================================================-->
<center>
<I>Linux Gazette</I><img alt="[tm]" src="../gx/tm.gif">,
<A HREF="http://www.linuxgazette.com/">http://www.linuxgazette.com/</A><BR>
This page maintained by the Editor of <I>Linux Gazette</I>,
<A HREF="mailto: gazette@ssc.com"> gazette@ssc.com</A>
<P>
<H5>Copyright © 1996-2002 Specialized Systems Consultants, Inc.</H5>
</center>
<HR NOSHADE>
<!--=================================================================-->
<center>
<H1><A NAME="wanted"><IMG ALIGN=MIDDLE ALT="" SRC="../gx/mailbox.gif">
The Mailbag</A></H1> <BR>
<!-- BEGIN wanted -->
</center>
<P> <hr> <P>
<!-- =================================================================== -->
<center><H3><font color="maroon">HELP WANTED : Article Ideas</font></H3></center>
<P>
<P> Send tech-support questions, Tips, answers and article ideas to The Answer Gang
<<A HREF="mailto:linux-questions-only@ssc.com"
>linux-questions-only@ssc.com</A>>. Other mail (including
questions or comments about the <EM>Gazette</EM> itself) should go to
<<A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A>>. All material
sent to either of these addresses will be considered for publication in the
next issue. <EM>Please send answers to the original querent too, so that s/he
can get the answer without waiting for the next issue.</EM>
<P> Unanswered questions might appear here. Questions with
answers--or answers only--appear in The Answer Gang, 2-Cent Tips, or here,
depending on their content. There is no guarantee that questions will
<em>ever</em> be answered, especially if not related to Linux.
<P> <STRONG>Before asking a question, please check the
<A HREF="../faq/index.html"><I>Linux Gazette</I> FAQ</A> (for questions about the
Gazette) or <A HREF="../tag/kb.html">The Answer Gang Knowledge Base</A> (for
questions about Linux) to see if it has been
answered there.</STRONG>
<P> <HR> <P>
<!--====================================================================-->
<!-- BEGIN HELP WANTED : Article Ideas -->
<UL>
<!-- index_text begins -->
<li><A HREF="#wanted/1"
><strong>Sync Netware client with Samba server</strong></a>
<li><A HREF="#wanted/2"
><strong>Oriya keyboard for only one program?</strong></a>
<li><A HREF="#wanted/3"
><strong>Lexmark Z22 Problem</strong></a>
<li><A HREF="#wanted/4"
><strong>X, keybindings, and Kmail</strong></a>
<li><A HREF="#wanted/5"
><strong>bigpond pppoe</strong></a>
<li><A HREF="#wanted/6"
><strong>Xinerama and large background images</strong></a>
<li><A HREF="#wanted/7"
><strong>pivot function for tft in linux</strong></a>
<!-- index_text ends -->
</UL>
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="wanted/1"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">Sync Netware client with Samba server</FONT></H3>
Tue, 23 Apr 2002 10:29:03 +0800
<BR>hwee ting (<a href="mailto:linux-questions-only@ssc.com?cc=gazette@ssc.com&cc=stuleeht@cwc.nus.edu.sg&subject=%20Re%3A%20%5BLG%2078%5D%20help%20wanted%20%231">stuleeht from cwc.nus.edu.sg</a>)
<P>
Is there any way that i can sync or saved my netware user password into
the samba password file so that it will allow authorised user to map
drives for furture use
</P>
<!-- end 1 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="wanted/2"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">Oriya keyboard for only one program?</FONT></H3>
Tue, 2 Apr 2002 08:30:44 +0100 (BST)
<BR>Girija Sarangi (<a href="mailto:linux-questions-only@ssc.com?cc=ben-fuzzybear@yahoo.com&cc=girija_linux@yahoo.co.in&subject=%20Re%3A%20%5BLG%2078%5D%20help%20wanted%20%232">girija_linux from yahoo.co.in</a>)
<P>
Hi there
</P>
<P>
During development of a word processor in Oriya
language ** I faced the following problem.
</P>
<ul>
<li> Oriya is a local language of India
</ul>
<P>
The character coding of oriya lies between 128 to 255.
Also the keyboard mapping I need is different from the
default keyboard mapping that is US_English.For typing
and displaying those oriya character I need changing
some kind of keyboard mapping.Could you please suggest
any method available in GTK+/Gnome to change the
default keyboard mapping ( only inside the
application). I tried the same using
XChangeKeyboardMapping function. But it changed the
keyboard mapping for the entire session throughout all
applications.Is there any alternative to it ?
Anticipating a response from you.
</P>
<P>
Regards
<br>Girija
</P>
<!-- end 2 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="wanted/3"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">Lexmark Z22 Problem</FONT></H3>
Thu, 4 Apr 2002 19:02:56 -0600
<BR>ABrady (<a href="mailto:linux-questions-only@ssc.com?cc=linux-questions-only@ssc.com&cc=kcsmart@kc.rr.com&subject=%20Re%3A%20%5BLG%2078%5D%20help%20wanted%20%233">kcsmart from kc.rr.com</a>)
<P>
I just hooked this printer up yesterday. Overall, it prints fine with
one exception. At the end of a page, both lights start flashing. I
believe this means some sort of paper error, like a jam or something.
After each page I have to reset the printer. BUT, this is only 100%
reproducible when trying to print 2 or more pages. If printing a single
page, sometimes it errors and sometimes it doesn't. This same printer
worked fine connected to a MAC. The difference, beyond the obvious, is
the MAC was connected via USB and the linux machine is running it in
parallel. Any help appreciated since it's pretty annoying to have to
print a songle page at a time.
</P>
<P>
Alan Brady
</P>
<!-- end 3 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="wanted/4"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">X, keybindings, and Kmail</FONT></H3>
Sun, 21 Apr 2002 13:47:27 -0400
<BR>Rodrigo P. Gomez (<a href="mailto:linux-questions-only@ssc.com?cc=linux-questions-only@ssc.com&cc=rpgomez@yahoo.com&subject=%20Re%3A%20%5BLG%2078%5D%20help%20wanted%20%234">rpgomez from yahoo.com</a>)
<P>
First of all, thanks to all the people who write for and maintain Linux
Gazette!
</P>
<P>
Now to my question:
</P>
<P>
I want to configure the key 'F2' for Kmail so that when I'm composing e-mail
and I press the 'F2' key, the phrase 'Kilroy was here' is inserted at the
current cursor location. How do I do this?
</P>
<P>
I'm pretty sure it has something do with Xresources, but I don't know how to
set it up.
</P>
<P>
TIA for any help you can give me on this.
</P>
<P>
--
Rod
</P>
<P>
P.s. I'm running Mandrake 8.2, with <A HREF="http://www.kde.org/">KDE</A> 2.2.2 if that is at all relevant to
the answer to the question.
</P>
<!-- end 4 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="wanted/5"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">bigpond pppoe</FONT></H3>
Mon, 22 Apr 2002 07:19:48 +0000
<BR>Hugh McPhee (<a href="mailto:linux-questions-only@ssc.com?cc=linux-questions-only@ssc.com&cc=h_mcphee@hotmail.com&subject=%20Re%3A%20%5BLG%2078%5D%20help%20wanted%20%235">h_mcphee from hotmail.com</a>)
<P>
Hi
</P>
<P>
I am trying to get my pppoe client to work.I am on the debian
distribution version 2.2.18pre 21. I am using the roaringpenguin client.
there is a continues failure when i try to log in. The ppp0 interface come
up but I can not tell if the system is logged into a ppp server.
I typed to turn on the debugging on the pppd but the system writes some
garbage and nothing seems to happen. When the system try's
to fire up it trys a ppp connection down a serial line, where in the config
file the maps the ppp connection to the eth0 interface?
How is it possible to to tell if the system is logged into a ppp server?
When I run the pppconfig script I cant work out the 4 text parameters the
script is after, I only know the user name and password.
The PPPd program inherently deals with a serial modem, how do I configure
this to use my ethernet card?
</P>
<P>
My provider is Bigpond in Australia and they use pppoe for authentication.
</P>
<P>
My user name and password are both in the pap and chap secrets file, is
there any need to repeat these in the ppp options file
</P>
<P>
How can I manually debug a ppp session, can I enter all the ppp config
parameters by hand?
</P>
<P>
a snip of my sysylog is pasted below. Can you help - Im a real newbie!
</P>
<p align="center">See attached <tt><a href="misc/wanted/syslog.txt">syslog.txt</a></tt></p>
<!-- end 5 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="wanted/6"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">Xinerama and large background images</FONT></H3>
Wed, 3 Apr 2002 23:34:23 +0200
<BR>Matthew H Ray (<a href="mailto:linux-questions-only@ssc.com?cc=linux-questions-only@ssc.com&cc=matthewhray@yahoo.com&subject=%20Re%3A%20%5BLG%2078%5D%20help%20wanted%20%236">matthewhray from yahoo.com</a>)
<P><STRONG>
I've searched Google groups and various mailing lists and I've found
several people with the same problem as me, but no solutions to this.
I'm running XF86 4.1.0.1 on several <A HREF="http://www.debian.org/">Debian</A> Woody xinerama 2 monitor
boxes (with several different combinations of video cards) and I can't
find a way to post a background image centered across both screens with
a single image. I can get an image to center on the left monitor and
the right monitor has the same section of the graphic showing (the left
half) on the right side of the screen.
</STRONG></P>
<pre><strong> -------+--------
| | |
| 12| 12|
| | |
-------+--------
</strong></pre>
<P><STRONG>
This is the behavior with xv, xloadimage, feh, gnome control center,
gqview and other image viewers. The odd thing is that for applications
that use transparency (gnome-terminal, xchat-gnome), the transparent
image is correct, so the transparent right screen has the correct
transparent image, but not the correct background image. I can send a
screenshot showing this phenomena if you like. Another odd behavior is
that small tiled images tile across the middle correctly (both
background and transparently). My question is how do I make an image
center across both screens correctly like below?
</STRONG></P>
<pre><strong> -------+--------
| | |
| 12|34 |
| | |
-------+--------
</strong></pre>
<P><STRONG>
Thanks,
Matthew H. Ray
</STRONG></P>
<P>
Hi Matthew!
<br>I once had enlightenment set up as xinerama and managed to get what
you want: the image across both screens, and it was even with
different resolutions on the screens: 1024x768 and 1280x1024.
I managed to get it (IIRC) in the enlightenment background settings
menu, by wildly fiddling with the sliders that are up/down and on the
sides of the image in the upper part of the control window.
But that was enlightenment, dunno how to do it in the other wm's ...
<br>Robos
</P>
<!-- end 6 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="wanted/7"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">pivot function for tft in linux</FONT></H3>
Thu, 11 Apr 2002 13:52:48 +0200
<BR>cdb (<a href="mailto:linux-questions-only@ssc.com?cc=linux-questions-only@ssc.com&cc=chris.deboer@rioned.org&subject=%20Re%3A%20%5BLG%2078%5D%20help%20wanted%20%237">chris.deboer from rioned.org</a>)
<P>
Hello,
Has anyone a solution on how to use
the pivot functionality for tft-screens
under Linux ?
</P>
<P>
Greetings
<br>Chris de Boer
</P>
<P><STRONG>
Greetings, Chris; what's a "pivot functionality?"
<IMG SRC="../gx/dennis/smily.gif" ALT=":)"
height="24" width="20" align="middle"> If you describe it, we
might know it. [Ben]
</STRONG></P>
<P>
You're not an old-time-enough-Mac guy, I suspect, to recognize the term
as generic, Ben: many current generation LCD panels, notably including
the Viewsonic's, will pivot on their center axis, becoming vertical.
</P>
<P>
Even hearing the signal from the panel, much less figuring out how to
remap everything to a new screen size, is likely a non trivial
problem...
</P>
<P>
A couple of quick Google searches didn't turn up anything suggestive...
</P>
<P>
Cheers, Jay R. Ashworth
</P>
<!-- end 7 -->
<a name="mailbag"></a>
<P> <hr> <P>
<!-- =================================================================== -->
<center><H3><font color="maroon">GENERAL MAIL</font></H3></center>
<P> <HR> <P>
<!--====================================================================-->
<!-- BEGIN GENERAL MAIL -->
<UL>
<!-- index_text begins -->
<li><A HREF="#mailbag/1"
></a>Linux User Groups questions --or--
<br><A HREF="#mailbag/1"
><strong>Marketing question: which Linux User Groups are the biggest?</strong></a>
<li><A HREF="#mailbag/2"
><strong>Making your Virtual Console Login Automatically</strong></a>
issue 69, henderson.html
<li><A HREF="#mailbag/3"
><strong>LG on CD</strong></a>
<li><A HREF="#mailbag/4"
><strong>Etiquette</strong></a>
Issue 64, The Mailbag
<!-- index_text ends -->
</UL>
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="mailbag/1"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">Marketing question: which Linux User Groups are the biggest?</FONT></H3>
Fri, 12 Apr 2002 11:04:54 -0400
<BR>Katherine Gill (<a href="mailto:gazette@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%20mailbag%20%231">kgill from brodeur.com</a>)
<!-- ::
Marketing question: which Linux User Groups are the biggest?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P>
Attn: Mike Orr
</P>
<P>
Hello, Mike -
We exchanged a few e-mails last year re/ Linux news. I'm wondering if you
can point me in the right direction. How would I go about determining
which US-based Linux user groups are the largest, or the most influential?
Registries I'm finding online don't give me an idea of size. Are there,
say, 5 or 10 groups that are known within the Linux community as being the
"biggies."
</P>
<P>
Thanks for your insight,
<br>Katherine Gill
</P>
<BLOCKQUOTE>
[Don Marti]
</BLOCKQUOTE>
<BLOCKQUOTE>
SVLUG: <A HREF="http://www.svlug.org"
>http://www.svlug.org</A>
</BLOCKQUOTE>
<BLOCKQUOTE>
NYLUG: <A HREF="http://www.nylug.org"
>http://www.nylug.org</A>
</BLOCKQUOTE>
<BLOCKQUOTE>
ALE: <A HREF="http://www.ale.org"
>http://www.ale.org</A>
</BLOCKQUOTE>
<BLOCKQUOTE>
NTLUG: <A HREF="http://www.ntlug.org"
>http://www.ntlug.org</A>
</BLOCKQUOTE>
<BLOCKQUOTE>
[Mike "Iron" Orr]
</BLOCKQUOTE>
<BLOCKQUOTE>
[Note to The Answer Gang: I'm forwarding this even though we don't
usually answer marketing questions (the querent sends in press
releases to News Bytes) because it asks a question I haven't seen
covered elsewhere, a question that will be of interest to many
readers.]
</BLOCKQUOTE>
<blockquote><font color="#000066">Fair 'nuff
<IMG SRC="../gx/dennis/smily.gif" ALT=":)"
height="24" width="20" align="middle">
-- Heather</font></blockquote>
<BLOCKQUOTE>
[Mike "Iron" Orr]
</BLOCKQUOTE>
<BLOCKQUOTE>
Hi, Katherine. I remember your name although I don't remember what we talked
about. I don't know of any statistics on user group size. BALUG
(<A HREF="http://www.balug.org"
>http://www.balug.org</A>)in San Francisco and SVLUG (<A HREF="http://www.svlug.org"
>http://www.svlug.org</A>) in
the Silicon Valley each used to get four hundred people per meeting as of a few
years ago, but I don't know about now. Those two are pretty "influential" in
terms of offering services and being activists. (E.g., SVLUG threw the Silicon
Valley Tea Party (<A HREF="http://www.svlug.org/events/tea-party-199811.shtml"
>http://www.svlug.org/events/tea-party-199811.shtml</A>) in honor
of the release of Windows 98 [wasn't that nice of them?], and crashed
Microsoft's big demo, "respectfully" wearing their penguin T-shirts and passing
out Linux CDs.) But really, user groups in general don't influence Linux in
any way. What they do is make Linux more accessible to their members.
</BLOCKQUOTE>
<blockquote><font color="#000066">Not sure where you're hoping to go with the statistics, but I question the
value of having them; without setting values on "influence" I wonder who
will care about the factoid, and your research efforts might have been
spent elsewhere. Nonetheless I'll give it a poke.
</font></blockquote>
<blockquote><font color="#000066">As an SVLUG member I can add some comments, mostly general. At some time in
the past we had an ongoing list-bourne argument about who was "the largest
LUG in the world". Members of two LUGs in entirely different parts of the
world started to claim this, approximately simultaneously. Some of the grist
included the more detailed question, what kind of members did you want to
count? Those who attend almost every meeting and regret when they can't make
it? The sum of those who attended any time last year (knowing that "the
regulars" are of course duplicates)? Average meeting attendance? Oh but we
have these regular installfests too and nobody counts there 'cuz we're busy.
Oh but anybody on the general mailing list is really a member -- and boy, do
we have a lot of lurkers. Then how did you want to count influence? And
influencing who?
</font></blockquote>
<blockquote><font color="#000066">As some started to get bitter about it, 'twas noted that a fight on some
stupid label certainly wouldn't help the community at large, and both really
changed over to "one of the largest". I forget who the other was; they're
not in my region and I'm a busy soul, so I don't even recall if they were
also in the U.S. Why? Because it wasn't as important as us all getting on
with our Linux-y lives. See my past editorial about "the coin of the realm."
</font></blockquote>
<blockquote><font color="#000066">In the world of Linux "influence" is not based on size, but on the aggregate
effort of individuals. An occasional individual is "big" in the sense of
having an extra degree of talent -- and eventually heaps of extra respect,
built up slowly over time -- a factor my SF-convention running friends at
Baycon (www.baycon.com) call "people points". Just being a plugger and
helping as one can can stack them up eventually too, though.
</font></blockquote>
<blockquote><font color="#000066">Do you mean "influential" like as in political efforts? Heh. Better to ask
the Electronic Frontier Foundation (www.eff.org) instead. But they won't
know so much about the OS preferred by any individual member, as about the
bills that are out there planning to prey on every nerdly soul in the country
(and many who aren't as it starts taking toll on ability to use the internet).
Oh yes, SVLUG <EM>members</EM> have been involved in a few rallies here and there.
And I'd love to see a notable bloc of senators throw all their weight against
the SSSCA because "statistics show" that the amassed geeks of the Silicon
Valley are deadset against it. (One of these statistics being California
among a limited batch of states that think Microsoft's "settlement" isn't
worth a bic pen.) And the DMCA otherwise known as the "only big label
companies whose policy about their copyrights is You Sure Better Not are
allowed to protect theirs, you multitudes whose policy is My Grandma Recipes
Can Belong To Every Mom can go rot." And so on. There are hundreds of
poisonous little bills a year and the politicos simply don't even visit the
world we actually live in.
</font></blockquote>
<blockquote><font color="#000066">Well what the heck. Maybe a "top ten" statistic would actually help. Good
luck, and wish us some while you're at it.
-- Heather</font></blockquote>
<P><STRONG>
Thanks, kindly!!
</STRONG></P>
<!-- end 1 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="mailbag/2"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">"Make Your Virtual Console Log In Automatically"</font></h3>
Mon, 15 Apr 2002 11:41:00 +0200
<BR>Stian Vading (<a href="mailto:gazette@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%20mailbag%20%232">stian.vading from telehuset.no</a>)
<P>As seen at
<a href="../issue69/henderson.html"
>http://www.linuxgazette.com/issue69/henderson.html</a></p>
<P>
Thanks for writing this exelent article, but i wonder i you can give me
any pointers to how to make X-window log in and autostart.
I use a debianized laptop, and having to log in every time i start up is
quite unnessesary.
I know mandrake has this option, but i cant find info on how its set up.
</P>
<P>
Hoping that if this is not the right place to ask, you could give me
feedback as well.
</P>
<P>
Thanks again
<br>Stian Vading
</P>
<BLOCKQUOTE>
[K.-H.]
</BLOCKQUOTE>
<BLOCKQUOTE>
the article is describing how to automatically login for textlogin. You can
easily place "startx" in your ~/.profile and so automatically launch X and
your standard window-manager.
</BLOCKQUOTE>
<BLOCKQUOTE>
For using that qlogin you probably will have to switch your debian system
from graphic login to text login.
</BLOCKQUOTE>
<BLOCKQUOTE>
Another possibility: It is possible to run more then one X server at once,
you could let it start the normal login screen but at the same time run
qlogin to log in automatically and start it's own X server on a different
virtual console (like vt
<IMG SRC="../gx/dennis/smily.gif" ALT="8)"
height="24" width="20" align="middle">. If this happens later then the gdm (or whatever
debian is using for graphical login) it will switch there automatically.
</BLOCKQUOTE>
<BLOCKQUOTE>
[John Karns]
</BLOCKQUOTE>
<BLOCKQUOTE>
Right you are - I forgot to consider the consequences of a ?dm boot
configuration. The 'startx' approach indeed assumes a text-based console
boot configuration.
</BLOCKQUOTE>
<!-- end 2 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="mailbag/3"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">LG on CD</FONT></H3>
Mon, 15 Apr 2002 19:32:19 -0700
<BR>Vijaya Kittu M (<a href="mailto:gazette@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%20mailbag%20%233">vijaykittu from yahoo.com</a>)
<P>
Can i distribute Linux Gazette (all issues as were avaiable) on a CD rom
that i was going to design with open source software ?
</P>
<P>
Vijaya Kittu M
</P>
<blockquote><font color="#001F3F">Yes.
-- Mike</font></blockquote>
<!-- end 3 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="mailbag/4"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">file://localhost/usr/share/doc/lg/issue64/lg_mail64.html</FONT></H3>
Wed, 24 Apr 2002 13:40:51 +0200
<BR>thetaworld (<a href="mailto:gazette@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%20mailbag%20%234">thetaworld from yahoo.com</a>)
<P>
Hello,
</P>
<P>
I am not sure if you understand really the meaning of words:
</P>
<P><BLOCKQuote>
etiquette and
vulgar.
</BLOCKQuote></P>
<P>
The Linux Gazette should conform to the first meaning and so exclude everything from the second meaning. Please refer to etiquette book from the nearest library.
</P>
<P>
Your public answer should never go to people like this one:
</P>
<P><BLOCKQuote>
i just came across your website and was looking up bad clusters
also.i've seen some of your replies to theses people and you seem
pretty cocky. you sound like a total dick, like you dont have the time
to just be nice and say geesh im sorry but you have to look elsewhere.
</BLOCKQuote></P>
<P>
even if you want to personally "punish" him, even if he would be right or wrong.
</P>
<P>
It would be good behaviour if you simply correct those public pages and ban vulgar words.
</P>
<P>
Sincerely,
<br>Marko
</P>
<blockquote><font color="#001F3F">We censor words like f*ck and c*nt because LG is an all-ages publication.
We do not use words like damn ourselves because several readers complained
about it several years ago, but we don't think it's necessary to censor it
from the occasional readers' mail. Obviously, people can differ over which
words belong in the first category and which in the second.
</font></blockquote>
<blockquote><font color="#001F3F">In any case, that issue was published over a year ago and this is the only
complaint we've received.
</font></blockquote>
<blockquote><font color="#001F3F">LG has never claimed to be the Emily Post of Linux. Our goal is to provide
technical information and to make Linux more fun. Letters are published or
not published according to their overall message, not whether they contain
certain words.
-- Mike</font></blockquote>
<BLOCKQUOTE>
[Thomas Adam, the LG Weekend Mechanic]
</BLOCKQUOTE>
<BLOCKQUOTE>
I would just like to re-iterate the comments that Mike
Orr made in this e-mail by saying that the querent
(that's the person that sent that "abuse" e-mail to
us) never actually sent an e-mail to us, asking a
question that pertained to Linux.
</BLOCKQUOTE>
<BLOCKQUOTE>
Indeed, many querents that e-mail us, don't actually
bother to <EM>really</EM> check to see <EM>who</EM> or they are
really asking their question to.
</BLOCKQUOTE>
<BLOCKQUOTE>
Thus, we get a lot of Windows questions that have no
relation to the subject matter contained within the
Linux Gazette.
</BLOCKQUOTE>
<BLOCKQUOTE>
I do not consider the replies to peoples' e-mails rude
in the least. Yes, harmless banter (Oh...hi Ben
<IMG SRC="../gx/dennis/smily.gif" ALT=":-)"
height="24" width="20" align="middle">
does take place, but it is really only because the
querent has asked a really stupid question, or it is
because of the reasons already discussed.
</BLOCKQUOTE>
<BLOCKQUOTE>
For example, I could be <EM>really</EM> picky, and say that
the phrase which you used:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
"Please refer to etiquette book from the nearest
library."
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
is nonsense. It is grammatically incorrect, since it
should read:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
"Please refer to ***an**** etiquette book from the
nearest library"
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
but who am I to complain???
</BLOCKQUOTE>
<BLOCKQUOTE>
Should you have a question relating to Linux, then
please send it to the list.
</BLOCKQUOTE>
<BLOCKQUOTE>
Regards,
-- Thomas Adam
</BLOCKQUOTE>
<BLOCKQUOTE><em>
It may be noted that we no longer publish all messages that come to us,
nor threads with no Linux (or </em>LG<em> related) content even if we do
sometimes answer their questions successfully. -- Heather
</em></BLOCKQUOTE>
<!-- end 4 -->
<a name="gaz"></a>
<P> <hr> <P>
<!-- =================================================================== -->
<center><H3><font color="maroon">GAZETTE MATTERS</font></H3></center>
<P> <HR> <P>
<!--====================================================================-->
<!-- BEGIN GAZETTE MATTERS -->
<UL>
<!-- index_text begins -->
<li><A HREF="#gaz/1"
><strong>2 Linux Questions</strong></a>
<li><A HREF="#gaz/2"
><strong>Artwork Contest</strong></a>
<!-- index_text ends -->
</UL>
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="gaz/1"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">2 Linux Questions</FONT></H3>
Wed, 03 Apr 2002 05:17:27
<BR>touheed mohammad (<a href="mailto:gazette@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%20gazette%20matters%20%231">tjcoo17 from hotmail.com</a>)
<P><STRONG>
Dear Sir/Madam
</STRONG></P>
<P><STRONG>
I would like to know from you answers of 2 Questions:
</STRONG></P>
<blockquote><font color="#000066">Strictly speaking, these are publishing questions, not Linux questions,
but I cheerfully answer questions about LG itself anyway.
-- Heather</font></blockquote>
<P><STRONG>
Is 'Linux Gazette' is itself a Jouranal(professional)?
</STRONG></P>
<blockquote><font color="#001F3F">No. It's a web zine produced by volunteers.
-- Mike</font></blockquote>
<blockquote><font color="#000066">Linux Gazette is hosted by SSC.com, the internet site of
Specialized Systems Consultants, Inc, a professional publishing company
which publishes cheat cards, maybe some books, but definitely the standard
print magazines Linux Journal and Embedded Linux Journal.
</font></blockquote>
<blockquote><font color="#000066">Although mirrored in approx. 47 countries, carried in nearly every major
distribution of Linux on the planet, translated to multiple languages
monthly, and the license we use allows it, there is not to my knowledge
anybody publishing print editions of the Linux Gazette on a regular basis.
If you know of such please let us know and we will be glad to give them
a place of honor on the mirrors page:
<A HREF="../mirrors.html"
>http://www.linuxgazette.com/mirrors.html</A>
</font></blockquote>
<blockquote><font color="#000066">The staff and columnists of Linux Gazette are unpaid volunteers. Other
than that we try to provide a high quality 'zine. We have been published
monthly since... (she steps aside to check the Table of Contents) ...
Sepetember 96 (not all issues before that were monthly) and there have been
a few mid-month special issues.
</font></blockquote>
<blockquote><font color="#000066">Some of our staff have attended large shows in a professional capacity as
press. You'd have to look back through our editorials for the references.
</font></blockquote>
<blockquote><font color="#000066">Linux Gazette is a part of the Linux Documentation Project, a worldwide
effort to provide usable documentation for many things one might want to
do with Linux.
-- Heather</font></blockquote>
<P><STRONG>
Is 'Linux Knowledge Portal' is a professional Joural?
</STRONG></P>
<blockquote><font color="#000066">Hmm, hadn't heard of this one before; Google! reveals:
<A HREF="http://www.linux-knowledge-portal.org"
>http://www.linux-knowledge-portal.org</A>
-- Heather</font></blockquote>
<blockquote><font color="#001F3F">I hadn't heard of it ... And since we <EM>do</EM> publish a
professional journal (Linux Journal), I asked LJ's Editor, and he hasn't
heard of it either.
</font></blockquote>
<blockquote><font color="#001F3F">I did a Google search and discovered that
<A HREF="http://www.linux-knowledge-portal.org"
>http://www.linux-knowledge-portal.org</A> exists. It used to be the SuSE Linux
Knowledge Portal. If you want to know whether it's a professional journal,
why don't you ask them? It also depends on what you mean by "professional
journal", and why you care.
</font></blockquote>
<blockquote><font color="#001F3F">If you want to send an article, advertisement or press release to Linux
Journal, see <A HREF="http://www.linuxjournal.com/contact.php"
>http://www.linuxjournal.com/contact.php</A> .
-- Mike</font></blockquote>
<blockquote><font color="#000066">An interesting looking news site, a little ugly in lynx but definitely
usable. Not hosted by SSC so our hosts couldn't say anything to its status.
I'm not involved with it myself, so what follows is merely my opinion. I'm
good at having opinions on things
<IMG SRC="../gx/dennis/smily.gif" ALT=":D"
height="24" width="20" align="middle">
</font></blockquote>
<blockquote><font color="#000066">It appears to depend heavily on automated retrievals from other sites which
produce news in the Linux world, freshmeat and slashdot for instance. It
seems professionally maintained to <EM>me</EM> though this is purely a gut
reaction to usability at the site. The "Help" button mentions that it
is themeable to your personal tastes if you let the site use cookies.
Too bad there's no About section.
</font></blockquote>
<blockquote><font color="#000066">The question of whether a newspaper is a real newspaper if they have no
investigative reporters and only read AP/Reuters, is a philosophical one
beyond the scope of our site. But if you find an answer to that question,
I'm sure the same answer applies here.
</font></blockquote>
<blockquote><font color="#000066">It is, however, fitting the common definition of "Portal" to a T.
-- Heather</font></blockquote>
<P><STRONG>
I would be grateful for your response.
</STRONG></P>
<P><STRONG>
Regards
Touheed
</STRONG></P>
<blockquote><font color="#000066">Since I cannot determine your definition of "Journal" and "professional"
in this context, I can't tell if either of these answer your question.
</font></blockquote>
<blockquote><font color="#000066">If your question is actually, "can I get paid for writing for Linux Gazette"
I'm afraid your answer is no. Consider the Linux Journal instead.
</font></blockquote>
<blockquote><font color="#000066">If your question is actually, "can I use getting published in Linux Gazette
as part of my Curriculum Vitae, resumé or to satisfy a publish-or-perish
imperative at my academic institution?" the answer is almost certainly yes.
You may want to consider our submission guidelines at:
<A HREF="../faq/author.html"
>http://www.linuxgazette.com/faq/author.html</A>
</font></blockquote>
<blockquote><font color="#000066">Use of a spell checker would be advised. The motto of our 'zine is "Making
Linux a little more fun!" and so writing in a style readable by a lot of
people is preferred.
</font></blockquote>
<blockquote><font color="#000066">As for Linux Knowledge Portal, perhaps you should ask their webmaster.
</font></blockquote>
<blockquote><font color="#000066">Hope you found that interesting; not sure if it's useful.
-- Heather</font></blockquote>
<!-- end 1 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="gaz/2"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/envelope.gif">
<FONT COLOR="navy">Artwork Contest</FONT></H3>
Wed, 03 Apr 2002 05:17:27
<BR>Heather Stern (<a href="mailto:gazette@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%20gazette%20matters%20%232"><em>LG</em> Technical Editor</a>)
<p>
You still have time to submit artwork for the contest introduced in last
month's <a href="../issue77/lg_backpage.html">Back Page</a>.
</p>
<P> <hr> </p>
<!-- *** BEGIN copyright *** -->
<H5 align="center">This page edited and maintained by the Editors
of <I>Linux Gazette</I>
<a href="http://www.linuxgazette.com/copying.html"
>Copyright ©</a> 2002
<BR>Published in issue 78 of <I>Linux Gazette</I> May 2002</H5>
<H6 ALIGN="center">HTML script maintained by
<A HREF="mailto:star@starshine.org">Heather Stern</a> of
Starshine Technical Services,
<A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
</H6>
<!-- *** END copyright *** -->
<center>
<H1><A NAME="tips"><IMG ALIGN=MIDDLE ALT="" SRC="../gx/twocent.jpg">
More 2¢ Tips!</A></H1> <BR>
<!-- BEGIN tips -->
Send Linux Tips and Tricks to <A HREF="mailto:linux-questions-only@ssc.com">linux-questions-only@ssc.com</A></center>
</center>
<UL>
<!-- index_text begins -->
<li><A HREF="#tips/1"
><strong>Tweaking the wily interface</strong></a>
<li><A HREF="#tips/2"
><strong>Clipping URLs</strong></a>
<li><A HREF="#tips/3"
><strong>w3m to access CUPS configuration utility</strong></a>
<li><A HREF="#tips/4"
><strong>Imagem linux_logo.h na Inicializacao do linux</strong></a>
<li><A HREF="#tips/5"
><strong>partial answer to euro-symbol question</strong></a>
<li><A HREF="#tips/6"
><strong>PPP</strong></a>
<li><A HREF="#tips/7"
><strong>Mouse control in X</strong></a>
<li><A HREF="#tips/8"
><strong>Re LG 77: More on NET4</strong></a>
<li><A HREF="#tips/9"
><strong>partition overlap = bad juju</strong></a>
<li><A HREF="#tips/10"
><strong>Re LG 77, wanted #1: private email</strong></a>
<li><A HREF="#tips/11"
><strong>RPMs</strong></a>
<li><A HREF="#tips/12"
><strong>Re LG 77, wanted #5: serial programming</strong></a>: toys.
<li><A HREF="#tips/13"
><strong>Re LG 77, wanted #5: serial programming</strong></a>: a guide.
<li><A HREF="#tips/14"
><strong>subsystem sftp</strong></a>
<li><A HREF="#tips/15"
><strong>some email related problems</strong></a>
<li><A HREF="#tips/16"
><strong>Linux Red Hat 6.2 Unistallation</strong></a>
<li><A HREF="#tips/17"
><strong>Make sure sshd is "always" there for you</strong></a>
<li><A HREF="#tips/18"
><strong>LJWNN tech tips</strong></a>
<ul>
<li>Python recursion limit
<li>Ssh2 client to ssh1 server
<li>Making executables smaller
<li>Headphone volume control
<li><A HREF="http://noframes.linuxjournal.com/subscribe/lja-sub.html"
>subscribe</a> to <I>Linux Journal's</I> Weekly News Notes</A>
</ul>
<!-- index_text ends -->
</UL>
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/1"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Tweaking the wily interface</FONT></H3>
Thu, 11 Apr 2002 00:39:48 -0400
<BR>Ben Okopnik (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%231%20accessibility">The Answer Gang</a>)
<P>
Well, I found a solution - but that solution is part of a package that's
interesting for more reasons than one. AccessControl, a package of useful
tweaks designed to help folks with disabilities, had what I needed and
more, along with a control panel that pulled it all together (of course,
the individual utilities could still be used as stand-alone programs.) It's
available at <<A HREF="http://cmos-eng.rehab.uiuc.edu/accessx/"
>http://cmos-eng.rehab.uiuc.edu/accessx/</A>>.
</P>
<P>
Interestingly enough, Dan Linder (the author) says that a similar panel has
been incorporated into X11R6.6 - a Very Good Thing, in my opinion. However,
for those of us who'd like (or need) a bit more control over our keyboards,
mice, display, etc. and are not willing to chase the bleeding edge, this
package can be a useful tool in the sometimes confusing "battle of the
interfaces".
</P>
<!-- end 1 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/2"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Clipping URLs</FONT></H3>
Mon, 8 Apr 2002 13:02:20 -0400
<BR>Ben Okopnik (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%232%20URLs">The Answer Gang</a>)
<P>
After going back to my tried-and-true "icewm" (KDE was just <EM>too</EM> bloated
for my 366MHz/64MB laptop), I gave a bit of thought to "URL clipping",
which - if not over-automated - could be a handy feature indeed. Then, I
remembered the "xclip" utility.
</P>
<p align="center">See attached <tt><a href="misc/tips/clipurl.bash.txt">clipurl.bash.txt</a></tt></p>
<P>
All that was left was tying "clipurl" to a key sequence in "icewm". To do
that, I simply added the following line to my "~/.icewm/keys" file:
</P>
<blockquote><pre>key "Alt+Ctrl+u" clipurl
</pre></blockquote>
<P>
Now, when I select a URL and want to launch it, I press "Alt-Ctrl-u", and -
presto! A new Netscape window pops up (if Netscape is already running, it
spawns a new one). It also works for files in your home directory, or
"clips" that contain the entire path as well as the filename.
</P>
<P>
One of these days, I might write a little "chooser" for "ftp://", etc.
URIs... but so far, it hasn't been a problem.
</P>
<!-- end 2 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/3"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">w3m to access CUPS configuration utility</FONT></H3>
Thu, 18 Apr 2002 00:34:16 -0700
<BR>Steven R. Robertson (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%233%20CUPS%20via%20w3m">srobert from anv.net</a>)
<P>
My tip concerns the CUPS configuration utility that is accessed through the
webbrowser at <A HREF="http://localhost:631/"
>http://localhost:631/</a>
</P>
<P>
My default browser, galeon, takes awhile to start on my machine. If all I
want to do is run the CUPS interface to change a printer parameter, then it's
much quicker to call it up with the w3m webbrowser in an xterm. Though text
based, w3m even supports inline images. I put a "printer" button on my gnome
panel that launches the following command when pressed:
</P>
<blockquote><pre>"xterm -title CUPS -bg black -fg white -geometry 110x46+240+50 -fn 7x14 -e w3m http://localhost:631/printers"
</pre></blockquote>
<P>
Steve Robertson
</P>
<!-- end 3 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/4"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Imagem linux_logo.h na Inicializacao do linux</FONT></H3>
Wed, 17 Apr 2002 10:40:44 +0100
<BR>Heather Stern (<a href="mailto:linux-questions-only@ssc.com?cc=alfredogn@bol.com.br&cc=editor@gazetadolinux.com&subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%234"><em>LG</em> Technical Editor</a>)
<BR>Translated by Pedro Medas (editor from gazetadolinux.com)
<br>Question from Alfredo Guimaraes Neto (alfredogn from bol.com.br)
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
I'm the editor of the '<em>Gazeta do Linux</em>', the portuguese version
of <em>Linux Gazette</em>.
We received the attached email with a question for you from
Alfredo Guimaraes Neto.
</STRONG></P>
<P><STRONG>
Cheers,
Pedro Medas
</STRONG></P>
<P>
Ola,
<br>Gostaria de saber se voces teem um tutorial de como mudar a imagem de
inicializacao do linux, aquele pinguinzinho com um copo de cerveja, pois
tentei varias vezes e estou com dificuldades, quando mando compilar o
kernel, da sempre erro nesse arquivo.
</P>
<P>
Grato,
Alfredo
</P>
<p><strong>
Hi,
</STRONG></P>
<P><STRONG>
I would like to know if you have a HOWTO to change the boot image of
linux, that penguin with a beer cup, I tried several times and I'm
having difficulties, when I try to compile the kernel, it reports always
the same error.
</STRONG></P>
<P><STRONG>
Greetings,
<br>Alfredo
</STRONG></P>
<HR width="10%" align="center"><P><em>
Thank you Pedro. I have an answer for him. If you would be kind enough
to translate it back I think he'd appreciate it. -- Heather
</em></P>
<p><font color="#000066">Hi Heather,
<br>Thanks for the answer to the 'Two Centavos Tip'.
I will translate it for him.
</font></p>
<p><font color="#000066">If you need any more info or help feel free to say so.
</font></p>
<p><font color="#000066">bests,
<br>Pedro
</font></p>
<blockquote>
Not precisely a HOWTO, but actually useful instructions, are at the Linux
Kernel Logo Patch Project:
<A HREF="http://www.arnor.net/linuxlogo/download.html"
>http://www.arnor.net/linuxlogo/download.html</A>
</blockquote>
<blockquote>
Apparently you are not the only one in the world who is inclined to change
the boot logo, but finds it hard to figure out where you would tweak the
kernel code to use your own. So these people have a patch that makes it
easy for everybody, not just kernel-hackers, to put in a new image.
</blockquote>
<blockquote>
I think they're looking for help on getting the non-intel platform logos
right.
</blockquote>
<blockquote>
For my own part, I like it, I think I'll be using it soon myself!
</blockquote>
<!-- end 4 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/5"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">partial answer to euro-symbol question</FONT></H3>
Mon, 1 Apr 2002 15:38:48 +0200 (MEST)
<BR>rene.leeuwen (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%235">rene from wxs.nl</a>)
<P>
Hi Mailgang,
</P>
<P>
Concerning the question of Donal Rogers (rogers from clubi.ie) in the
Mailbag of LG76 I found the following in:
<A HREF="http://users.pandora.be/sim/euro/112/kde/kbdandbdf.html"
>http://users.pandora.be/sim/euro/112/kde/kbdandbdf.html</A>
<A HREF="http://www.interface-ag.com/%7Ejsf/europunx_en.html"
>http://www.interface-ag.com/%7Ejsf/europunx_en.html</A>
</P>
<P>
So: you may start a new xterminal screen with the Euro-enabled font:
</P>
<blockquote><pre>xterm -fn -misc-fixed-medium-r-normal--13-120-75-75-C-70-ISO8859-15 &
</pre></blockquote>
<P>
In this terminal you can use the Euro-symbol (eg. echo -e "\244"). The
question I cannot answer is: how do you force all of your applications to
use this font (if indeed that is the best solution). But I hope it gives
you something to start working with.
</P>
<P>
--
groeten,
<br>Rene van Leeuwen
</P>
<!-- end 5 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/6"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">PPP</FONT></H3>
Sun, 7 Apr 2002 23:40:06 -0400
<BR>Ben Okopnik (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%236">The Answer Gang</a>)
<BR>Question from cka74 (cka74 from yahoo.com)
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
Please kindly advise me on PPP.
</STRONG></P>
<P><STRONG>
I'm using RedHat 7.2, somehow I having difficulties in getting the modem
setup and recognized.
</STRONG></P>
<P><STRONG>
I compiled the new kernel with PPP add-on: Network Device Support -> (Y)
PPP Support -> (Y) PPP Support for async serial ports
</STRONG></P>
<P><STRONG>
1. My external modem was connected to com1, so when I echo > <TT>/dev/ttyS0</TT>,
my TR on modem get lighted.
</STRONG></P>
<P><STRONG>
2. I set; setserial -g <TT>/dev/ttyS0</TT>, it shows: <TT>/dev/ttyS0</TT>, UART: 16550A,
Port: 0x03f8, IRQ: 4
</STRONG></P>
<blockquote>
OK - those numbers look fine, and the above test says that you're
definitely on the right port.
</blockquote>
<P><STRONG>
I ensured that IRQ 4 is not used by other program by cat <TT>/proc/interrupts</TT>
</STRONG></P>
<P><STRONG>
3. When I performed; wvdialconf <TT>/etc/wvdial.conf</TT>, the results show ttyS0
modem was not found.
</STRONG></P>
<P><STRONG>
I tested out on 2 external modems, same problem arise. but of course my
both modems (one of them was MERZ 566) were in working condition.
</STRONG></P>
<P><STRONG>
Where did I went wrong?
</STRONG></P>
<blockquote>
As far I can tell, you didn't; "wvdialconf" does not guarantee to detect
all modems. Try using "minicom" to test it: do the serial port setup (it's
pretty self-explanatory) and see if the modem will respond to simple
commands like "AT" (it should come back with "OK"), "AT&V" (show the
profiles), "ATDT5555555" (dial those numbers), etc. If it responds, just
use those values in your "<TT>/etc/wvdial.conf</TT>", and everything will be fine.
</blockquote>
<!-- end 6 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/7"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Mouse control in X</FONT></H3>
Tue, 9 Apr 2002 03:40:43 -0400
<BR>Ben Okopnik (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%237">The Answer Gang</a>)
<blockquote><pre>xmodmap -e "pointer = 1 3 2 4 5"
</pre></blockquote>
<P>
If that works for you, you can place the expression (the part between the
double quotes) in a ".Xmodmap" file in your home directory - or launch it
directly by specifying the entire command line in your "~/.xinitrc" or
"~/.xsession" file, depending on how you start your X session.
</P>
<!-- end 7 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/8"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">More on NET4 (from LG 77, 2 cent tips)</FONT></H3>
Wed, 3 Apr 2002 07:07:38 -0600
<BR>Brian Finn (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%238">brian from nacmsw.com</a>)
<BR>replying to Chris Gianakopoulos' previous Tip
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
In the 2 cent tips from LG 77, Chris Gianakopoulos writes:
</STRONG></P>
<P><STRONG><BLOCKQuote>
"It is my belief that Net4, although it may be influenced by other
protocol suites, was written from scratch (other han being derived
from NET3.)"
</BLOCKQuote></STRONG></P>
<P><STRONG>
I read recently in Linus Torvalds' "Just for Fun" (and again in
in Glyn Moody's "Rebel Code") that the TCP/IP implementation in
Linux was written from scratch in order to avoid being hassled by
AT&T, who owned UNIX at the time. I suppose AT&T was using their
legion of lawyers to go after other UNIX implementors for royalties.
</STRONG></P>
<P><STRONG>
Thanks,
<br>Brian Finn
</STRONG></P>
<blockquote>
Hi Brian,
<br>That makes sense. I've read somewhere that the book, "The Design of the Unix
Operating System" by Maurice Bach, influenced Linus Torvalds with respect
to his Linux stuff. The book described the algorithms of System V Release
2. Of course, other stuff influenced him also. Thanks for that info,
Brian.
</blockquote>
<blockquote>
Regards,
<br>Chris G.
</blockquote>
<!-- end 8 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/9"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">partition overlap = bad juju</FONT></H3>
Fri, 12 Apr 2002 01:30:51 -0400
<BR>Frank Brand (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%239">fbrand from uq.net.au</a>)
<BR>replying to the Gang's previous Thread
<P>
Hi there Ben,
</P>
<P>
I am responding to you as you were first on the list of answer people:-
</P>
<P>
I refer to "ntfs clobbered my ext3fs!!" in Linux Gazette 77 in which the
questioner asks about a partition overlap.
</P>
<P>
I have encountered this twice. Both times it has been with a mixed
Windows/Linux drive and using automated partitioning (ie Disk Druid or
DiskDrake). Your questioner has exactly this scenario.
</P>
<P>
Now, I never use automated partitioning and I partition the drive using
parted before I start the installation. I use primary partitions where
possible and avoid mixed Windows/Linux disk setup.
</P>
<P>
I have experienced the overlapping partition syndrome and have found it very
difficult to overcome. I have not been able to sort it out using fdisk as
either Linux or Windows fdisk can not do anything to such corrupted
partitions. I have only been able to recover using disk manager software and
this was a destructive recovery.
</P>
<P>
Regards
<br>Frank Brand
</P>
<!-- end 9 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/10"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Re: [LG 77] help wanted #1 private email</FONT></H3>
Wed, 3 Apr 2002 09:00:37 +0100
<BR>Neil Youngman (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2310">n.youngman from ntlworld.com</a>)
<P><STRONG>
Hi there
</STRONG></P>
<P><STRONG>
I would like to know how to set up my email on my home network with win98
outlook express and Linux.
</STRONG></P>
<P><STRONG>
I would like to set it up so that I can email anybody else in the house on
the network and email via the internet when needed.
</STRONG></P>
<P><STRONG>
Thank You
<br>Cheryl
</STRONG></P>
<blockquote>
There are a couple of linuxWorld articles describing Nicholas Petreley's
setup, which may be suitable for you requirements.
</blockquote>
<blockquote>
<A HREF="http://www.linuxworld.com/site-stories/2002/0318.ldap1.html"
>http://www.linuxworld.com/site-stories/2002/0318.ldap1.html</A>
<br><A HREF="http://www.linuxworld.com/site-stories/2002/0401.ldap2.html"
>http://www.linuxworld.com/site-stories/2002/0401.ldap2.html</A>
</blockquote>
<!-- end 10 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/11"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">RPMs</FONT></H3>
Thu, 25 Apr 2002 07:06:04 +0100
<BR>Neil Youngman (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2311">n.youngman from ntlworld.com</a>)
<BR>Question from Lord of Wolves (Lord0Wolves from aol.com)
<P><STRONG>
Simple question: What is a ".RPM" and how do I use them. I assume they
are a type of compression file, but what do I need to use them.
</STRONG></P>
<blockquote>
RPMs are RedHat Package manager files. They contain the necessary files for a
package, including setup scripts to be run pre- and post-install. They also
have a list of dependencies, so they can determine whether you have installed
the other packages on which this one depends.
</blockquote>
<blockquote>
Simple usage
</blockquote>
<blockquote><pre>rpm -Uvh pkg.rpm # install package from pkg.rpm
rpm -Fvh pkg.rpm # freshen (update) package from pkg.rpm
</pre></blockquote>
<blockquote>
In both the above examples v is verbose and h is using a hash mark progress
indicator.
</blockquote>
<blockquote><DL><DT>
For examples of other usages see
<DD><A HREF="http://www.getlinuxonline.com/omp/distro/RedHat/rpm.htm"
>http://www.getlinuxonline.com/omp/distro/RedHat/rpm.htm</A>
</DL></blockquote>
<blockquote>
Neil Youngman
<br>P.S. If you're asking questions of this list, please turn off MIME and HTML.
</blockquote>
<!-- end 11 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/12"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Re: [LG 77] help wanted #5 serial programming</FONT></H3>
Wed, 03 Apr 2002 22:54:48 -0500
<BR>Gary J. Wozniak (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2312">gjwoz from 110.net</a>)
<P>
Hi,
</P>
<P>
Check out www.linuxtoys.com. This site has some great examples of how
to read/write form serial ports in linux.
</P>
<P>
The
</P>
<P>
Radio Shack DVM with RS-232 <<A HREF="http://www.linuxtoys.com/dvm/dvm.html>"
>http://www.linuxtoys.com/dvm/dvm.html></A>;
</P>
<P>
article was of particular use for me.
</P>
<P>
Good luck,
<br>G Wozniak
</P>
<!-- sig -->
<!-- end 12 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/13"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Re: [LG 77] help wanted #5 serial programming</FONT></H3>
Wed, 10 Apr 2002 14:35:24 +0200
<BR>Matthias Prinke (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2313">matthias.prinke from sci-worx.com</a>)
<P>
Hi,
</P>
<P>
check out the Serial Programming Guide for POSIX Compliant Operating Systems
at <A HREF="http://www.easysw.com/~mike/serial"
>http://www.easysw.com/~mike/serial</A>
You can find the answer in chapter 4.
</P>
<P>
Best regards,
<br>Matthias
</P>
<!-- end 13 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/14"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">subsystem sftp</FONT></H3>
Mon, 8 Apr 2002 18:27:59 -0400
<BR>Ben Okopnik (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2314">The Answer Gang</a>)
<BR>QUestion from Francoise Guilbault (guilbaultf from em.agr.ca)
<P><STRONG>
Why when starting SSH client does a subset of sftp open up in the
background by default?
</STRONG></P>
<blockquote>
Take a look at the last line of your "<TT>/etc/ssh/sshd_config</TT>":
</blockquote>
<blockquote><pre>Subsystem sftp /usr/lib/sftp-server
</pre></blockquote>
<blockquote>
Also, from "man sshd":
</blockquote>
<blockquote><pre>Subsystem
Configures an external subsystem (e.g., file transfer daemon).
Arguments should be a subsystem name and a command to execute
upon subsystem request. The command sftp-server(8) implements
the "sftp" file transfer subsystem. By default no subsystems
are defined. Note that this option applies to protocol version 2
only.
</pre></blockquote>
<blockquote>
I find the next-to-the-last sentence very interesting... on Solaris, for
example, it's defined but commented out. On <A HREF="http://www.debian.org/">Debian</A> Linux, it's defined
<EM>and</EM> enabled by default. I suppose you could turn it off by commenting out
the line, but I'd make absolutely certain that I didn't have any need for
it first.
</blockquote>
<!-- end 14 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/15"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">some email related problems</FONT></H3>
Wed, 3 Apr 2002 18:40:17 +0100
<BR>Neil Youngman (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2315">n.youngman from ntlworld.com</a>)
<BR>Question from amitava maity (amaity from vsnl.net)
<P><STRONG>
Hello everybody,
</STRONG></P>
<P><STRONG>
I have emails with a MS-TNEF file and a humor.mp3.scr file as attachments
waiting in my inbox. How do I view/listen to these attachments?
</STRONG></P>
<blockquote>
You really don't want to open humor.mp3.scr. That's the Badtrans virus!
Fortunately, as a linux user you're immune
<IMG SRC="../gx/dennis/smily.gif" ALT=":-)"
height="24" width="20" align="middle">
</blockquote>
<blockquote>
See <A HREF="http://vil.nai.com/vil/content/v_99069.htm"
>http://vil.nai.com/vil/content/v_99069.htm</A> for more info.
</blockquote>
<blockquote>
Neil Youngman
</blockquote>
<blockquote><font color="#000066">As a general point, anything which has two whole three letter extensions
(.jpg.pdf, .mp3.scr, and so on) especially when the second is one that
may be reasonable to auto-view, you should be immediately suspicious that
it's probably a virus. The same goes for MIME types which represent
auto-view type files but which do not match the extensions given on the
attachment (e.g. audio/wav but the attachment says .jpg).
<br>However, there are 4 or 5 different small utilities that will deal
with a true "TNEF" attachment, easily found at <a href="http://freshmeat.net/"
>freshmeat.net</a> -- Heather</font></blockquote>
<!-- end 15 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/16"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Linux Red Hat 6.2 Unistallation</FONT></H3>
Fri, 12 Apr 2002 01:46:11 -0400
<BR>Ben Okopnik (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2316">The Answer Gang</a>)
<BR>Question from Alok Garg (aalugarg from yahoo.com)
<P>
On Fri, Apr 12, 2002 at 06:02:39AM +0100, Alok Garg wrote:
</P>
<P><STRONG>
Hello Sir,
<br>I have 2 HDD of 20 Gig each, on the Primary drive I
have WinNT and on the secondary I have Linux RH 6.2 I
wanted to uninstall Linux from the system without
effecting my data on Win NT. I wanted to move my
secondary drive to other machine.
</STRONG></P>
<P>
I'm sorry, but that's impossible.
<IMG SRC="../gx/dennis/smily.gif" ALT=":)"
height="24" width="20" align="middle">
Removing Linux from your machine would
utterly destroy (beyond any hope of recovery) the data on <EM>every</EM> WinNT
machine in a 60-mile radius of where you are. Note that everybody will know
exactly who is responsible: you'll be left in the center of a large charred
circle. Even if you removed the HD with Linux and carried it off, as soon
as you erased it, your NT would <EM>know</EM>.
</P>
<P>
It all happens magically, really.
</P>
<P>
(HINT: There's no magic. NT may be evil, but it does <EM>not</EM> watch your Linux
drive and explode if anything changes.)
</P>
<P>
See <<A HREF="../tag/kb.html#uninstall"
>http://www.linuxgazette.com/tag/kb.html#uninstall</A>> for tips on
uninstalling Linux.
</P>
<!-- end 16 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/17"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Make sure sshd is "always" there for you</FONT></H3>
Mon, 29 Apr 2002 19:16:33 -0700
<BR>James T. Dennis (<a href="mailto:linux-questions-only@ssc.com?subject=%20Re%3A%20%5BLG%2078%5D%202c%20Tips%20%2317">The Answer Gang</a>)
<P>
Make sure sshd is "always" there for you.
</P>
<P>
Using OpenSSH (circa 2.95 or later?) you can configure the sshd to
run directly from your <TT>/etc/inittab</TT> under a "respawn" directive by
adding the -D (don't detach) option like so:
</P>
<blockquote><pre># excerpt from /etc/inittab, near end
ss:12345:respawn:/usr/sbin/sshd -D
</pre></blockquote>
<P>
This will ensure that an ssh daemon process is always kept running
even if the system experiences extreme conditions (such as OOM,
out of memory, overcommitted memory) or a careless sysadmin's
killall which kills the running daemon. So long as init can function
it will keep an sshd running (just as it does with your existing
getty processes).
</P>
<P>
This is particularly handy for systems that are co-located and which
don't have (reliable) serial port console connections. It just might
save that drive across town or that frustrating, time consuming and
embarassing call to the colo staff, etc.
</P>
<!-- end 17 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<P> <A NAME="tips/18"><HR WIDTH="75%" ALIGN="center"></A> <P>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Linux Journal Weekly News Notes tech tips</FONT></H3>
<h4 align="center"><br>Python recursion limit
</h4>
<P>
If Python's built-in recursion limit keeps your incredibly cool
recursive function from working, you can temporarily set a different
recursion limit with the sys module.
</P>
<blockquote><pre>oldlimit = sys.getrecursionlimit()
sys.setrecursionlimit(len(big_hairy_list))
incredibly_cool_recursive_function(big_hairy_list)
sys.setrecursionlimit(oldlimit)
</pre></blockquote>
<HR width="10%" align="center">
<h4 align="center"><br>Ssh2 client to ssh1 server
</h4>
<P>
If you have an account on a system where only your ssh1 key is
installed in your authorized_keys file, you can force your ssh
connection to use version 1 of the protocol with ssh -1 example.com.
</P>
<P>
Then you can use scp with the -1 option to transfer your ssh2 key
there, so that you can use version 2 to connect from now on. Paranoid
sysadmins are turning off version 1 access, so you should be using
version 2 everywhere by now to be on the safe side.
</P>
<HR width="10%" align="center">
<h4 align="center"><br>Making executables smaller
</h4>
<P>
To make executables smaller, try running strip(1) with the options -R
Comment -R Note. This removes "comment" and "note" sections that the
compiler and linker may have added during the build process.
</P>
<P>
(source: MontaVista Software's MontaVista Zone customer support site.)
</P>
<HR width="10%" align="center">
<h4 align="center"><br>Headphone volume control
</h4>
<P>
If you're running your headphones straight out of your sound card's
"Line out" jack, you might notice there's no volume control. Instead
of trashing your ears or firing up a audio mixer every time you need
to set the volume, just bind the commands
</P>
<blockquote><code><font color="#000033"><br> aumix -v+4 # crank up the volume!
</font></code></blockquote>
<P>
and
</P>
<blockquote><code><font color="#000033"><br> aumix -v-4 # turn that crap down!
</font></code></blockquote>
<P>
to two spare function keys. (In Sawfish, this is under the "Bindings"
menu in the sawfish-ui program.) Presto--free and easy volume control
straight from the keyboard.
</P>
<P>
There are also nifty little volume control applets for the <A HREF="http://www.kde.org/">KDE</A> and
<A HREF="http://www.gnome.org/">GNOME</A> taskbars, but why spend pixels on a common task when you have
all those keys just sitting there?
</P>
<!-- end 18 -->
<P> <hr> </p>
<!-- *** BEGIN copyright *** -->
<H5 align="center">This page edited and maintained by the Editors
of <I>Linux Gazette</I>
<a href="http://www.linuxgazette.com/copying.html"
>Copyright ©</a> 2002
<BR>Published in issue 78 of <I>Linux Gazette</I> May 2002</H5>
<H6 ALIGN="center">HTML script maintained by
<A HREF="mailto:star@starshine.org">Heather Stern</a> of
Starshine Technical Services,
<A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
</H6>
<!-- *** END copyright *** -->
<!--endcut ========================================================= -->
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<center>
<H1><A NAME="answer">
<img src="../gx/dennis/qbubble.gif" alt="(?)"
border="0" align="middle">
<font color="#B03060">The Answer Gang</font>
<img src="../gx/dennis/bbubble.gif" alt="(!)"
border="0" align="middle">
</A></H1>
<BR>
<H4>By Jim Dennis, Ben Okopnik, Dan Wilder, Breen, Chris, and...
(<a href="tag/bios.html">meet the Gang</a>) ...
the Editors of Linux Gazette...
and You!
<br>Send questions (or interesting answers) to
The Answer Gang
for possible publication
(but read the <a href="../tag/ask-the-gang.html">guidelines</a> first)
</H4>
</center>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<p><hr><p>
<H3>Contents:</H3>
<dl>
<dt><a href="#tag/greeting"
><strong>¶: Greetings From Heather Stern</strong></A></dl>
<DL>
<!-- index_text begins -->
<dt><A HREF="#tag/1"
><img src="../gx/dennis/bbub.gif" height="28" width="50"
alt="(!)" border="0"
><strong>Serial Console "buddy system"</strong></a>
<dt><A HREF="#tag/2"
><img src="../gx/dennis/bbub.gif" height="28" width="50"
alt="(!)" border="0"
><strong>Watchdog daemon</strong></a>
<dt><A HREF="#tag/3"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
><strong>Future in Linux</strong></a>
<dt><A HREF="#tag/4"
><img src="../gx/dennis/bbub.gif" height="28" width="50"
alt="(!)" border="0"
><strong>Dual boot systems made easy</strong></a>
<dt><A HREF="#tag/5"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
><strong>gigabit unhappy</strong></a>
<dt><A HREF="#tag/6"
><img src="../gx/dennis/bbub.gif" height="28" width="50"
alt="(!)" border="0"
><strong>Adding seldom-used directories to your PATH</strong></a>
<dt><A HREF="#tag/7"
><img src="../gx/dennis/bbub.gif" height="28" width="50"
alt="(!)" border="0"
><strong>Experience Installing SuSE Linux 8.0</strong></a>
<!-- index_text ends -->
</DL>
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/greeting"><HR WIDTH="75%" ALIGN="center"></A>
<H3 align="left"><img src="../gx/dennis/hbubble.gif"
height="50" width="60" alt="(¶) " border="0"
>Greetings from Heather Stern</H3>
<!-- begin hgreeting -->
<p>Hi Mom!</p>
<p>(I couldn't resist)</p>
<p>
Hello everyone and once again welcome to the world of The Answer Gang.
We had around 500 messages come through, the peeve of the month seems
to be a few people overdosing on their sense of humor, and in case anyone
was curious... my printer works fine these days.
</p>
<p>
I'm sure some people are going through Spring Cleaning. In my case I'm
cleaning up my hard drive. I got a much, much bigger one and used my
new distro installation as an excuse to perform the reorganization at the
same time. This effectively turned an afternoon's task into a couple of
days of juggling bits and an occasional adventure throughout the month to
correct one or another facet of the installation.
</p>
<p>
At this point all my virtual hosts work, and I've finally gotten over how much
easier elm is than mutt because I'm successfully using hooks to make the silly
thing much brighter about what folders to save things to. For my style of
folder reading this is perfect! Now all I have to do is whap those "elm2mutt"
people for writing a converter that doesn't work if elm is already gone and
you only have the aliases left. Sigh.
</p>
<p>
In fact I'm planning to leap feet first into the new development cycle over
at <a href="http://www.lnx-bbc.org/">LNX-BBC.org</a>. Nick has this cool
new build system and when we're done the thing really will be able to make
world on itself, I think.
</p>
<p>I'm pleased to see that kernels are settling down to some pretty usable
stuff. Soon I'll be able to trust it on ultrasparc and maybe update our
production server. Meanwhile, a nice solid 2.2.x kernel for us, yes indeed.
</p>
<p>That's one of the things I like best about Linux, actually. Nobody holds
a gun to your head and says that you have to use the latest and bleed all
over that bleeding edge. If your sound or your pcmcia card just doesn't work
right under the new stuff - great, stick with what works. Userland is a
seperate thing, you can upgrade it by some fairly small parts most of the time.
Of course glibc is a tangled mess, but then, it pretty much always was...
</p>
<p>Later this month (Memorial Day weekend, for those of you who follow US
holidays) I'll be running the Internet Lounge at
<a href="http://www.baycon.org">Baycon</a>, a science fiction convention.
It'll be a nice tribute to how well older systems hold up with Linux under
the hood. If you happen to be in Northern California around then, feel
welcome to drop on by.
</p>
<p>See y'all next month, folks!</p>
<!-- end hgreeting -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/1"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 1 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Serial Console "buddy system"</H3>
<p align="right"><strong>Answer By James T. Dennis
<p></strong></p>
<blockQuote>
Do you have a stack of Linux machines in a server room or at a
co-location site? Do they all have serial consoles hooked up
to a reliable terminal server? Or, is it that you can't afford
to buy one of those cool Cyclades or other terminal servers, or your
boss won't let you take up valuable rack space for one?
</blockQuote>
<blockQuote>
Depending on your answers to these questions you may qualify to use
the unrevolutionary, completely unpatented "serial buddy system"
Just take (or make) a few inexpensive null modem cables (n+1 for
n machines) and link the systems in a chain (COM1 on System X to
COM2 on System X+1 and around to System 0 to form a loop).
</blockQuote>
<blockQuote>
Install minicom or ckermit/gkermit, and mgetty, agetty, or uugetty
(any getty that's capable of null modem -- serial, operation) and add
the appropriate lines to your <TT>/etc/inittab</TT>, and option to <TT>/etc/lilo.conf</TT>
or your grub configuration files (to pass console= directives to the
kernel(s)) and (also optionally) compile your kernel with serial console
support.
</blockQuote>
<blockQuote>
(The gory details are left for more detailed treatises such as
<A HREF="http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-17.html#term_as_console"
>http://www.tldp.org/HOWTO/Text-Terminal-HOWTO-17.html#term_as_console</A>
and <TT>.../linux/Documentation/serial-console.txt</TT> --- wherever your kernel
sources are stored).
</blockQuote>
<blockQuote>
The end result of all this is that, when you need to look at the console
of any machine, you can use a terminal package (such as minicom,
or ckermit/gkermit) on the machine "next to" your target. This is much
less flexible and convenient and a bit less robust than using a good
terminal server --- but it's better than driving across town to the
colo facility just because you're reboot failed, or you have to pass
some new option to your (possibly new) kernel, or whatever). It's
predicated on the likelihood that you won't manage to munge all of your
machines at once.
</blockQuote>
<h4 align="center">Pros</h4>
<p>
Cheap:
</p>
<blockQuote>
you can get null modem cables for less than $5 (U.S)
(Better you can make your own RJ45 to DB-9 null modem adapter
pairs and use normal ethernet patch cords, in a wide selection
of colors
<IMG SRC="../gx/dennis/smily.gif" ALT=";)"
height="24" width="20" align="middle"> to connect them! That keeps the rats nest behind
you machines a tad more manageable).
</blockQuote>
<p>
Available:
</p>
<blockQuote>
you probably already have a couple of spare serial ports
on that server, anyway (and some of the new kernels even support
USB serial console drivers!)
</blockQuote>
<p>
More Available/Robust:
</p>
<blockQuote>
some PC motherboards support serial console
right into their CMOS set-up --- so you can change the boot
device, etc.
</blockQuote>
<p>
Fairly Robust:
</p>
<blockQuote>
No single point of failure? It's possible (with
more advanced fussing) to force the getty's to be quiet. That
should allow each of the null modems to be bi-directiional
(a login could be initiated from either end by connecting to
the line and hitting enter or sending a BREAK) (The trick is
to force the getty's to wait for a line signal before issuing
and login: prompt --- some of them have this option). Obviously
systems with four serial ports can be cross wired for additional
redundancy --- though only one port on any system can be the
"console" --- serial getty's can be run on the others.
</blockQuote>
<blockQuote>
Did I mention CHEAP! This is way cheaper than by a Cyclades and
paying the rackspace rent on it, too; and much cheaper than a
PC Weasel 2000 (and spending a PCI slot on that!) and even cheaper
than a set of KVM <EM>cables</EM> (not to speak of the KVM switch and
rackspace consumption you'd devote to THAT).
</blockQuote>
<blockQuote>
BTW: you can also add a modem or two into the mix --- putting
them on systems with a extra serial ports (COM3 or even COM2
on some system where you've got the "bi-directional, quiet
getty hack" working). This can get you in to do troubleshooting
even if you're network connection to the colo goes down. That's
especially handy if you happen to have another null modem into
your router's console! (As I: "I updated the packet filters
on the Cisco and now we're locked out! Ooops!").
</blockQuote>
<blockQuote>
[And, if it's saved your butt a few times, but proves to be
unbearable for other reasons (see below) it's easy to plug
in that terminal server when you get your boss to pony up for
it
<IMG SRC="../gx/dennis/smily.gif" ALT=";)"
height="24" width="20" align="middle"> ].
</blockQuote>
<h4 align="center">Cons</h4>
<p>
Kludgy:
</p>
<blockQuote>
You have to remember which machines are neighbored
to one another; you have to mark up your rack diagrams with
another cryptic detail.
</blockQuote>
<p>
No centralized control, logging, monitoring etc:
</p>
<blockQuote>
There are
a lot of advantages to a modern terminal system (in the case
of recent Cyclades products --- the are embedded systems running
a Linux kernel from flash and supporting ssh for network to
serial gateway functions). The "buddy system" is much simpler
than all that, but much less "featureful."
</blockQuote>
<p>
Works "well enough":
</p>
<blockQuote>
This approach may deter your boss/manager
from letting you get that terminal server and "do it right."
C'est la vie!
</blockQuote>
<!-- end 1 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/2"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 2 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Watchdog daemon</H3>
<p align="right"><strong>Answer By James T. Dennis
<p></strong></p>
<blockQuote>
The Linux kernel supports a class of devices called "watchdog"
drivers. These are programmable timers which are wired to a system's
reset or power lines. They are common on non-PC servers and workstations
and in embedded devices and are increasing included in PC PCI chipsets.
There are also PC adapter cards that can function as watchdog timers,
some of them are included in adapters with other functions (such as the
PC Weasel 2000, or some high precision real-time clocks?) and some of
them have electronics to monitor CPU or case temperature, power supply
voltages, etc.
</blockQuote>
<blockQuote>
These all have one function in common, they can be set to some time
interval (60 seconds by default, under Linux) and will count down
towards zero. If they ever reach zero they'll strobe the reset line
and force the hardware to reboot. Thus the require period "petting"
or they'll "bite" you.
</blockQuote>
<blockQuote>
The Linux kernel supports a variety of watchdog hardware, and also
includes one which is a software emulation of what a watchdog timer
does. (Those are a bit less robust since some forms of kernel panic
or failure <EM>might</EM> leave the system wedged and unable to execute the
softdog code). (The Linux kernel can be set to reset after a time delay
in case of panic --- the default is to dump a message and registers to the
the console and wait for a human to read them and reboot. Read the
bootparam(7) man pages and search for panic= for details on how to
over-ride that).
</blockQuote>
<blockQuote>
All of this is of no use unless you also have a daemon or utility that
can set the watchdog, monitor the system, and periodically "pet the
dog." (Some texts on this topic use the more abusive "kicking" analogy
--- but I find that distasteful).
</blockQuote>
<blockQuote>
Of course one can write one's own daemon, or even a cron job (if one
over-rode the default 60 second value to be a bit longer, to account for
possible cron delays). However, it's best to start with one that's
already written and reasonably well proven. The <A HREF="http://www.debian.org/">Debian</A> project has one
that's simply called "watchdog." Although it is a Debian package it can
be adapted for use on any Linux distribution.
</blockQuote>
<blockQuote>
This particular daemon performs up to 10 internal system tests
(most are optional) and it can be configured to execute a custom suite
of tests --- your own script or binary which must return a zero exit
value on success (and should run in under some liberal time limit).
In other words, it's extensible. On failure it can attempt to execute
a custom "repair" script or binary, then it can try a soft reboot
(with statically compile code -- NOT by calling the normal 'shutdown'
or 'reboot' binaries). Failing all of that, it will simply fail to
write to the <TT>/dev/watchdog</TT> which will cause the kernel to fail to
"pet the dog" (hardware) or cause the kernel to reboot (softdog).
</blockQuote>
<blockQuote>
In (almost) any event a system failure should result in a reboot
instead of a hang. That can be good for systems that are remotely
located and hard to get reach. Of course Linux is pretty robust and
reliable: so it's rare that the watchdog will be needed; and of course
it <EM>could</EM> be that the watchdog will cause some spurious reboots,
sometimes --- especially when initially configuring and tuning it.
But there are cases where it's worth the risk and effort.
</blockQuote>
<!-- end 2 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/3"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 3 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Future in Linux</H3>
<p><strong>From Morgan Howe
</strong></p>
<p></strong></p>
<p align="right"><strong>Answered By Dan Wilder, Michael Gargiullo, Thomas Adam (the LG Weekend Mechanic),
Ben Okopnik
</strong></p>
<blockQuote>
LJ,
</blockQuote>
<blockQuote>
I'm almost a junior in college now, and I know I want a career in the computer field, but my real love is Linux. I also am really interested in networking and the internet, but there's just so many options its hard to make up my mind. I'm wondering if there is a good paying career for a Linux professional, and if so, what should I do in my last two years of college to prepare myself? I can't decide if I should go with an information systems degree, or just a regular CS degree. If I could just get any information about possible career ideas in the linux field, or even if you could point me in the right direction to find more information I'd greatly appreciate it, and you have my word I'll renew my subscription when it runs out.
<IMG SRC="../gx/dennis/smily.gif" ALT=";)"
height="24" width="20" align="middle">
</blockQuote>
<blockQuote>
Thanks in advance,
Morgan Howe
</blockQuote>
<blockquote><em><font color="#000066">Near as I can tell, the Linux Journal staff decided to send it to us and
see if we could answer him better. I hope he, and anyone else out there
job seeking these days, finds this useful.
-- Heather</font></em></blockquote>
<blockQuote>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Dan Wilder]
</blockQuote>
<blockQuote>
Most everybody ad SSC works full-time in Linux. IBM, HP and other
major players are putting lots of money into Linux, and it seems
to be holding its own as a web server platform while continuing to
creep into the enterprise.
</blockQuote>
<blockQuote>
You might try keying "Linux" into a search of dice.com. Lots of
spots for network administrators, web designers, driver writers,
and others, last time I checked.
</blockQuote>
<blockQuote>
Your mileage may vary. A large Redmond company might prefer if there
were no such thing as Linux, and though many of us have our opinions,
in truth only time will tell.
</blockQuote>
<blockQuote>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Michael Gargiullo]
</blockQuote>
<blockQuote>
There are more and more Linux based jobs out there. OK Granted the market
isn't great right now, but more and more companies are realizing the
benifits of Open Source.
</blockQuote>
<blockQuote>
Your school path should be based on what you want to do... Are you looking
to write the next killer app or kernel module? If so go with the CS Degree,
and learn good coding form.
</blockQuote>
<blockQuote>
As for the company in redmond...If you like them the do hire Linux
professionals( The don't openly admit this) but a friend of mine who is a
Perl genius and a strict Solaris guy just got picked up by them for their
"enterprise email server project". Redmond might scream and shout that open
source is evil, but they love and use it as well. Just remember, up until a
few years ago, all of their web servers were running on *nix boxes. Another
example, they have a software version control package, that is based off an
open source package (They were even lame about it, all of the comands are
the same but have the "ms" prefix).
</blockQuote>
<blockQuote>
Sorry I ran off on a tangent... There are jobs out there...
</blockQuote>
<blockQuote>
Good Luck
Clean Code
</blockQuote>
<blockQuote>
-Mike
</blockQuote>
<blockQuote>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Mike "Iron" Orr, LG Editor]
</blockQuote>
<blockQuote>
I'm in Seattle. The only places I can think of to search are:
</blockQuote>
<blockQuote><ol>
<LI>The job websites - <A HREF="http://www.monster.com"
>http://www.monster.com</A>, <A HREF="http://www.dice.com"
>http://www.dice.com</A>, etc.
<LI>Your local hi-tech career fair
<LI>Your local Chamber of Commerce
<LI>Your local library
<LI>Something else I was going to mention, but I forgot.
</ol></blockQuote>
<blockQuote>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Thomas Adam, the LG Weekend Mechanic]
</blockQuote>
<blockQuote>
(Well, this is the Linux Gazette (LG), not Linux Journal (LJ), but I'll let
you off
<IMG SRC="../gx/dennis/smily.gif" ALT=":-)"
height="24" width="20" align="middle">
</blockQuote>
<blockQuote>
Linux is becoming more and more popular with
businesses these days. Certainly you should have no
problem coming into "contact" with it.
</blockQuote>
<blockQuote>
...as for your CS degree...
</blockQuote>
<blockQuote>
I assume that you're an American. I am English and so
cannot really say what your courses are like. I am 19
and am currently at University. I am doing an HND
(Higher National Diploma) in Computer Science, which
does cover some Unix aspects, if only basic. But it is
a good sign that the course leaders here acknowledge
the fact that Unix (and indeed Linux) is being used.
</blockQuote>
<blockQuote>
Any computer-orientated course should allow you the
opportunity of using Linux. There is yet to be a
degree here in the UK for Linux. However, software
engineering which uses C, does use the Unix
environment. So, you might get into Linux that way.
</blockQuote>
<blockQuote>
I would recommend going along to a local LUG to find
out from the memebers there how they got involved with
Linux.
</blockQuote>
<blockQuote>
There is information out tbere, especially on the
internet.
</blockQuote>
<blockQuote>
I did a google/linux search and founf 1,2,9998 hits
for Linux orientated jobs.
</blockQuote>
<p><strong><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
and you have my word I'll renew my subscription
when it runs out.
<IMG SRC="../gx/dennis/smily.gif" ALT=";)"
height="24" width="20" align="middle">
</strong></p>
<blockQuote><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Thomas]
<IMG SRC="../gx/dennis/smily.gif" ALT=":-)"
height="24" width="20" align="middle"> I get the LJ too -- but don't feel obliged to
re-new your subscription, just because I and Dan have
helped you.
</blockQuote>
<blockQuote>
It has been a pleasure.
</blockQuote>
<blockQuote>
Good luck. Let me know how you get on.
</blockQuote>
<BLOCKQuote>
<blockQuote><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Thomas]
I did a google/linux search and founf 1,2,9998 hits
for Linux orientated jobs.
</blockQuote>
<blockQuote><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Ben]
Is this that New Math I keep hearing about? Thomas, please send me your
professors' email addresses. It's remedial classes for you, sir.
<IMG SRC="../gx/dennis/smily.gif" ALT=":)"
height="24" width="20" align="middle">
</blockQuote>
<blockQuote>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Thomas]
Lol, I thought you'd like it Ben. Of course, don't
tell the others it's really that secret KGB code that
you've been after. I like the cover up of blaming my
maths too -- nobody will ever suspect that our plan
for world domination is near completion
<IMG SRC="../gx/dennis/smily.gif" ALT=":-)"
height="24" width="20" align="middle">
</blockQuote>
</BLOCKQuote>
<blockQuote>
Ok, seriously now though, I made a typo error.
</blockQuote>
<blockQuote>
Sorry, Mr. Okopnik, sir, it shan't happen again.....
<br>--Thomas Adam
</blockQuote>
<!-- end 3 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/4"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 4 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Dual boot systems made easy</H3>
<p align="right"><strong>Answer By Murray Hogg, Dutch
<p></strong></p>
<blockQuote>
Just a little tip which I've never seen before, but solves alot of the
problems invovled in partitioning drives during a Linux install.
</blockQuote>
<blockQuote>
Rather than go to the trouble of partitioning the hard-drive on a
functional Windows system (is that an oxymoron?) I simply placed it in a
hard-drive caddy. When it came to installing <A HREF="http://www.redhat.com/">Red Hat</A> 7.2 I replaced the
drive in the caddy with a second drive I happened to have from an
obsolete system. Now, by simply inserting the appropriate hard-drive in
the caddy, I can boot into Win98 or Linux with no more effort than it
normally takes to use a Linux boot-disk -- assuming, of course, that
your system BIOS allows to autoedetect the hard-drive on boot-up.
</blockQuote>
<blockQuote>
Just a few comments on the advantage of doing this;
</blockQuote>
<blockQuote>
It can be a cheap way of getting into Linux as it's actually cheaper to
buy a new hard-drive and caddy for install in a new system than it is to
go out and buy an old 486 or Pentium I (or whatever) -- it also takes
lot's less desk space!
</blockQuote>
<blockQuote>
It has the advantage that the Linux and Windows installs are totally
independent -- a crash on one has no chance of effecting the other
whatsoever and it circumvents the problem that later versions of Windows
have to be the only OS on a system.
</blockQuote>
<blockQuote>
The one draw-back is the need to add a second (third?) hard-drive to
allow swapping of files between two OS's.
</blockQuote>
<blockQuote>
Finally, I'm not a developer or hacker, but I imagine using multiple
hard-drives would also be a great way to experiment with new Linux
distro's or versions (or even software packages) without risking damage
to a known and trusted installation.
</blockQuote>
<blockQuote>
Hope someone finds it helpful, regards
</blockQuote>
<blockQuote>
Murray Hogg
</blockQuote>
<HR width="10%" align="left"><blockQuote>
Hi again,
</blockQuote>
<blockQuote>
I just recieved the following warning about the use of hard-drive
caddies which I thought ought to be attached to my dual-boot system
idea;
</blockQuote>
<blockQuote>
Thanks to "Dutch" for the following insights.
</blockQuote>
<HR width="10%" align="left"><blockQuote>
You make a few good points in your post. Now from 10 years as a
hardware technician I'm going to inject a few cautionary notes.
</blockQuote>
<blockQuote>
1) If you are going to use a caddy system, be sure you get a decent
one with solid, well designed alignment rails and good heavy duty
connection pins. Over time the cheap ones can become mis-alligned and
cause bent pins on the internal connectors. Best case the drive won't
be recognized, worst case is a short causing damage to your system.
</blockQuote>
<blockQuote>
2) Along the same lines, most removable drive setups do not make solid
metal-metal connections to conduct heat from the drive into the case
where it is dissipated. So any caddy worth buying should have a
cooling fan of some sort built into the tray.
</blockQuote>
<blockQuote>
3) Make sure to wait (usually a good slow count to 20) until your
drives have COMPLETELY spun down before you remove them. Removing a
drive that is still spinning is just asking for damage to the
bearings, heads, etc.
</blockQuote>
<blockQuote>
4) Treat the removed drives with care (like they were delicate glass).
I've seen people yank a caddy out of a machine and just drop it on
their desk like a book. How long do you think something as delicate
as a hard drive can take that kind of abuse?
</blockQuote>
<blockQuote>
5) Be extremely careful of static discharge, especally around the
connection pins on the back of the caddy. ESD can kill a drive in a
caddy very easily since the drive is not attached to any sort of
protective ground.
</blockQuote>
<blockQuote>
Dutch
</blockQuote>
<blockQuote>
"I think therefore I am...usually in a lot of trouble."
</blockQuote>
<!-- end 4 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/5"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 5 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>gigabit unhappy</H3>
<p><strong>From Steven
</strong></p>
<p align="right"><strong>Answered By Ben Okopnik
<p></strong></p>
<P><STRONG>
Hey All,
</STRONG></P>
<P><STRONG>
We are running <A HREF="http://www.redhat.com/">Red Hat</A> Linux on a Compaq ML570 with four Xeon processors and
one gigabyte of RAM. The server has two NIC cards, one compaq gigabit card
and one 3com 100Mbs card. After some help from all of you, I have been able
to successfully install and configure both NIC cards. However, I have found
that after one hour of use, the gigabit card loses all connectivity,
however, the 3com card stays up fine. We have tested this scenario several
times, and the gigabit card is definitely dropping connectivity after about
an hour. The only way to bring it back is to reboot the box, in which case
they both work fine, but only for about an hour, then the gigabit loses
connectivity again.
</STRONG></P>
<P><STRONG>
I checked out the Compaq website for a new driver, and there was one
available, however, when I tried to build it with the 'make install' command
from the created directory which contained the Makefile, I received an error
message stating that he Kernel Source was not available. I took a look at
the Makefile, and saw it was calling a 'linux' directory in <TT>/usr/src/</TT>
however, all I have is a 'redhat' directory in <TT>/usr/src/.</TT> I copied the
contents of the 'redhat' directory to a new directory called 'linux' and
still I had the same problem.
</STRONG></P>
<P><STRONG>
I am running out of ideas, and was hoping someone out there might have run
into this problem before, either with multiple NICS or with Compaq RPMS.
</STRONG></P>
<P><STRONG>
Any info would really help!
</STRONG></P>
<P><STRONG>
Thanks,
Staven
</STRONG></P>
<blockQuote><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Ben]
It sounds like precisely what the error says: the kernel source is not
available (and kudos to Compaq for making the error that clear; I've seen
some absolutely <EM>st00pid</EM> error messages.) You're compiling a module (Linux
doesn't use "drivers", at least not in the Wind*ws sense); modules get
pushed onto the kernel, effectively modifying how the OS itself does Stuff.
Therefore, you need to have the source code - module compilation depends on
it.
</blockQuote>
<blockQuote>
Run "uname -r" to find out what version you're running. Download and
install that version's source tree on your system; this will go under
"<TT>/usr/src</TT>" as "kernel-source-<version>". Create a symlink called "linux"
under "<TT>/usr/src</TT>" that points to your newly-installed source tree:
</blockQuote>
<blockquote><pre>ln -s /usr/src/kernel-source-<version> /usr/src/linux
</pre></blockquote>
<blockQuote>
You should be able to run your "make" from here on.
</blockQuote>
<blockQuote>
(Obviously, you should delete your current "<TT>/usr/src/linux</TT>" before any of
this - taking wild guesses of that sort can get you in trouble.)
</blockQuote>
<!-- end 5 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/6"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 6 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Adding seldom-used directories to your PATH</H3>
<p align="right"><strong>Answer (as originally posted on linux-list) by Ted Stern
</strong></p>
<blockquote><em><font color="#000066">This content is actually from several messages originally from linux-list,
and I have moved around parts for readability. I hope you all don't mind.
-- Heather</font></em></blockquote>
<blockQuote>
The question was how to add a path for occasionally-used scripts without having
to modify the PATH variable directly. Matlab has a command 'addpath' that
does this. He tried to do it with a shell script, but of course that didn't
work because it executes in a subprocess, and subprocesses can't modify their
parent's environment.
</blockQuote>
<blockQuote>
The more people banging on modules the better. I think it would be great
if all package maintainers could set up a modulefile to go with their
installations.
</blockQuote>
<blockQuote>
Here at Cray, we are in the midst of a giant package installation sequence.
Given that there are dozens of open/free/GPL software packages around, and our
techies like to use them on all the platforms they work on, it has been
nightmarish trying to keep up with every single software distribution. So
they set up something called "cfengine" (I think) and each package gets its
own automatic modulefile. This makes it easy to get access to tools like
LaTeX if you need them.
</blockQuote>
<blockQuote>
... later he adds ...
</blockQuote>
<blockQuote>
I found the name of the package we are using here to install 100's of ports
for various platforms:
</blockQuote>
<blockQuote><DL><DT>
MPKG
<DD><A HREF="http://staff.e.kth.se/mpkg"
>http://staff.e.kth.se/mpkg</A>
</DL></blockQuote>
<blockQuote>
It is already integrated with Environment Modules!
</blockQuote>
<HR width="10%" align="left"><blockQuote>
Others have posted various ways to do this, but I'd like to point out that
they are all re-inventing the wheel.
</blockQuote>
<blockQuote>
A method to modify environment variables cleanly was developed over 10 years
ago. It is called Environment Modules. It compiles under Linux. It happens
to be the method Cray has used for the last 7 years to modify paths for
different versions of its compilers and libraries.
</blockQuote>
<blockQuote>
You can even get the latest version via anonymous CVS from sourceforge.
</blockQuote>
<blockQuote>
See <A HREF="http://modules.sourceforge.net"
>http://modules.sourceforge.net</A> for more details.
</blockQuote>
<blockQuote>
Here's an example of how it works.
</blockQuote>
<blockQuote>
In your startup file, (I use tcsh) you put a line like
</blockQuote>
<blockquote><pre> source /opt/Modules/default/init/tcsh
</pre></blockquote>
<blockQuote>
In a directory filled with "modulefiles", one modulefile named "myghost" might
contain some commands like
</blockQuote>
<blockquote><pre> setenv GS_LIB /local/path/to/my/ghostscript/lib
prepend-path PATH /local/path/to/my/ghostscript/bin
prepend-path PATH /local/path/to/my/ghostcript/man
</pre></blockquote>
<blockQuote>
To access your local ghostscript stuff, you could say
</blockQuote>
<blockquote><pre> module load myghost
</pre></blockquote>
<blockQuote>
and the environment variables are modified as you would expect them to be.
</blockQuote>
<blockQuote>
To remove all trace of your changes, you do
</blockQuote>
<blockquote><pre> module unload myghost
</pre></blockquote>
<blockQuote>
and all is as it was before.
</blockQuote>
<blockQuote>
The Environment Modules package has been banged on in a variety of production
settings at SUN (where it was initially developed), SGI, IBM, HP, etc., so it
is fairly robust.
</blockQuote>
<blockQuote>
There is also a mailing list (majordomo), with extremely low traffic, mostly
just announcements:
</blockQuote>
<blockquote><pre> modules-interest@eng.auburn.edu
</pre></blockquote>
<blockQuote>
There are probably other packages to do the same things as Environment
Modules, but I doubt that they have as much infiltration into the corporate
infrastructure
<IMG SRC="../gx/dennis/smily.gif" ALT=";-)"
height="24" width="20" align="middle"> .
</blockQuote>
<blockQuote>
Good luck,
Ted
</blockQuote>
<blockQuote><CODE>
gpg fingerprint = 6171 14B3 A323 965B 614D 056F B41C 03AE E404 986C
</CODE></blockQuote>
<HR width="10%" align="left"><blockQuote>
... Iron also asked Ted ...
</blockQuote>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Iron]
How do you set your From: address on a per-list basis? Do you do something
like "edit headers" in mutt and change it manually for each message? That
would be tedious. Or do you have an automated way to do it?
</STRONG></P>
<blockQuote><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Ted]
Read the full header of an email message, and you will usually see an
indication of what the MUA is.
</blockQuote>
<blockQuote>
I use Gnus, an extraordinarily powerful email package within Emacs. Of
course, I also use the anon CVS version, so I sometimes have a few bugs to
deal with
<IMG SRC="../gx/dennis/smily.gif" ALT=";-)"
height="24" width="20" align="middle">. But you can just use the version of Gnus that comes
with Emacs if you like.
</blockQuote>
<blockQuote>
In my .gnus file, I have a setting as follows:
</blockQuote>
<blockquote><pre> (setq gnus-posting-styles
'(
("^nnfolder.*:lists.gnus"
(From "Ted Stern <stern+gnus@cray.com>"))
("^nnfolder.*:lists.fortran"
(From "Ted Stern <stern+fortran@cray.com>"))
("^nnfolder.*:lists.linux"
(From "Ted Stern <stern+linux@cray.com>"))
))
</pre></blockquote>
<blockQuote>
Gnus treats mail like news, so I read folders of mail as if they were groups.
Within certain of my groups, the setting above adds the extra "From:" header.
</blockQuote>
<!-- end 6 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/7"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 7 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Experience Installing SuSE Linux 8.0</H3>
<p align="right"><strong>Answer By Edgar Howell
<p></strong></p>
<blockQuote>
Linux ready for the desktop? -- <A HREF="http://www.suse.com/">SuSE</A> seems to think so.
</blockQuote>
<blockQuote>
On 13 April I installed SuSE Linux 8.0 (2.4.18-4GB) on a notebook.
Ignoring one glitch (a pcmcia module, but notebooks are notorious
for difficult installs) and my disinclination towards gui-anything,
it was the easiest installation of an operating system I have ever
experienced -- other than Coherent and DOS.
</blockQuote>
<blockQuote>
Not having a PC available with sufficient resources for recent
releases of Linux, the now 2-year-old Toshiba Satellite 2180 CDT
became the target. In theory all data on it was backed up to the
PC but "just in case" <TT>/home</TT> and a bit more got tar'd and copied to
the PC "for a while". So it wasn't an update but a clean install.
</blockQuote>
<blockQuote>
Probably I installed at least 4 times. But then 2 is normal: the
first time around suprises don't always get proper responses, the
second time is for real. However, there was something about the
pcmcia module that hung the install as the system was coming up for
the first time. No disk activity but the fan's coming on said the
poor AMD was sweating heavily.
</blockQuote>
<blockQuote>
Once I believed that -- and by then I had learned that the default
office install includes Star Office (which I used to like but
would rather replace since it shows its origins too much) -- I
chose the standard install without office stuff and before turning
it loose removed the pcmcia module from the list of packages to
install. After that it was like ho, hum...
</blockQuote>
<blockQuote>
The following is my protocol of installation, prompts indented
(if the terminology differs from what SuSE actually uses stateside,
that's due to my translation from German):
</blockQuote>
<blockquote><pre> boot CD 1 - menu
Installation
Language
German
menu - new/update/start
new installation
installation settings
accept
start installation?
yes-install
root password
xxx,ppp
add new user
yyy,ppp
monitor
LCD
SVGA 800x600@60HZ
CRT settings
graphic (settings OK)
network interfaces and modems not detected
next
command line login
root,ppp
shutdown -h now
</pre></blockquote>
<blockQuote>
This took barely 24 minutes, most of which involved installing
software. And I have omitted what was done to avoid installing the
troublesome pcmcia module (which wouldn't be necessary on a PC).
</blockQuote>
<blockQuote>
What really blew me away is that under the monitor options "LCD"
was right there and as model one could choose "SVGA 800x600@60HZ"!
Yeah, I still checked with sax. The horizontal and vertical
frequencies were right. Afterwards I spent several hours playing
with the notebook. It even powers off when you shutdown!
</blockQuote>
<blockQuote>
Of course it was also neat that the partitions were recognized
correctly (yeah, I know, a "clean install", but I've <EM>always</EM> used
Partition Magic) and when all was said and done Win98 was still
there, although there would have been no tears shed. Interesting
was what can only be described as a gui-LILO: boot and you get
about 5 or 10 seconds to make a choice on a graphics screen.
</blockQuote>
<blockQuote>
I'm not unbiased. I've been with SuSE since their 5.1. This was
the first time using yast2, the graphic install, since they no
longer have yast1. I wasn't aware of any possibility of driving
yast1 with a script but would have much prefered that, to make it
easy to do an identical install on several machines. But then my
past includes IBM sysgens with decks of cards. What irritates me
about gui-installs is the infinity of questions that need to be
answered -- every single time. At least until this SuSE release.
</blockQuote>
<blockQuote>
Well, on a PC with adequate resources the yast2 install should go
really slick. And like it or not that really is the yardstick
nowadays and should go well with the desktop crowd.
</blockQuote>
<blockQuote>
Until now I have felt that even frustrated Windows users should
stick with what they know unless they are seriously interested in
how real operating systems function. In my opinion this release
definitely is ready for prime time.
</blockQuote>
<!-- end 7 -->
<P> <hr> </p>
<!-- *** BEGIN copyright *** -->
<H5 align="center">This page edited and maintained by the Editors
of <I>Linux Gazette</I>
<a href=""
>Copyright ©</a> 2002
<BR>Published in issue 78 of <I>Linux Gazette</I> May 2002</H5>
<H6 ALIGN="center">HTML script maintained by
<A HREF="mailto:star@starshine.org">Heather Stern</a> of
Starshine Technical Services,
<A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
</H6>
<!-- *** END copyright *** -->
<H4 ALIGN="center">"Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>
<HR>
<center>
<table cellpadding=7><tr><td>
<IMG SRC="../gx/bytes.gif" border=1 ALT="News Bytes">
</td><td>
<H3>Contents:</H3>
<ul>
<li><a HREF="#leg">Legislation and More Legislation</a>
<li><a HREF="#links">Linux Links</a>
<li><a HREF="#conferences">Conferences and Events</a>
<li><a HREF="#general">News in General</a>
<li><a HREF="#distro">Distro News</A>
<li><a HREF="#commercial">Software and Product News</a>
</ul>
</td></tr></table>
<STRONG>Selected and formatted by <A HREF="mailto:michael.conry@softhome.net">Michael Conry</A></STRONG>
</center>
<P> Submitters, send your News Bytes items in
<FONT SIZE="+2"><STRONG>PLAIN TEXT</STRONG></FONT>
format. Other formats may be rejected without reading. You have been
warned! A one- or two-paragraph summary plus URL gets you a better
announcement than an entire press release. Submit items to
<A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A>
<P> <hr> <P>
<!-- =================================================================== -->
<IMG ALT="[issue 97 cover image]" SRC="misc/bytes/lj-cover97.png" WIDTH=200 HEIGHT=268
ALIGN="left" HSPACE="20">
The May issue of <A HREF="http://www.linuxjournal.com/"><I>Linux
Journal</I></A> is on newsstands now.
This issue focuses on kernel internals. Click
<A HREF="http://www.linuxjournal.com/modules.php?op=modload&name=NS-lj-issues/issue97&file=index">here</A>
to view the table of contents, or
<A HREF="http://www.linuxjournal.com/subscribe/">here</A>
to subscribe.
<P>
<FONT COLOR="green">All articles through December 2001 are available for
public reading at
<A HREF="http://www.linuxjournal.com/magazine.php">http://www.linuxjournal.com/magazine.php</A></FONT>.
Recent articles are available on-line for subscribers only at
<A HREF="http://interactive.linuxjournal.com">http://interactive.linuxjournal.com/</A>.
<BR CLEAR="all">
<!-- P> <hr> <P -->
<!-- =================================================================== -->
<!-- H3><IMG ALT=" " SRC="../gx/bolt.gif">
<font color="green">
March/April 2002 <I>Embedded Linux Journal</I>
</font>
</H3>
<IMG ALT="[issue 8 cover image]" SRC="misc/bytes/elj-cover8.png" WIDTH=200 HEIGHT=268
ALIGN="left" HSPACE="20">
Issue #8 issue of <A HREF="http://embedded.linuxjournal.com/"><I>Embedded Linux
Journal</I></A> has articles about .
This issue focuses on System Administration.
<A HREF="http://embedded.linuxjournal.com/magazine/issue08/">
Click here for the table of contents.</A>
<P>
Embedded Linux Journal is available free to qualified subscribers in the USA,
Canada and Mexico. <A HREF="http://embedded.linuxjournal.com/subscribe/">Click here to subscribe.</A>
<BR CLEAR="all" -->
<!-- =================================================================== -->
<a name="leg"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">Legislation and More Legislation</font></H3></center>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">CBDTPA
</FONT>
</H3>
The
<a href="http://www.eff.org/">
Electronic Frontier Foundation</a>
has published the
<a href="http://www.eff.org/EFFector/HTML/effect15.11.html#VI">
results</a>
of their "Alphabet Soup Contest" to find more meaningful interpretations of
acronyms like CBDTPA. Among the
<a href="http://www.eff.org/EFFector/HTML/effect15.11.html#VI">
winners</a>
was Steven Cherry with the insightful translation: "Consume, But Don't Try
Programming Anything" which very succinctly sums up what many would see as
the spirit behind this legislation. Unsurprisingly, initiatives like the
<a href="http://www.eff.org/IP/SSSCA_CBDTPA/20020321_s2048_cbdtpa_bill.pdf">
CBDTPA</a>
and groupings such as the
<a href="http://bpdg.blogs.eff.org/">
BPDG</a> [EFF link] (Broadcast Protection Discussion Group) have met with
substantial popular opposition.
<a href="http://rtnews.globetechnology.com/servlet/RTGAMArticleHTMLTemplate/C/20020410/gt?tf=tgam%252Frealtime%252Ffullstory_Tech.html&cf=globetechnology/tech-config-neutral&slug=gt&date=20020410&archive=RTGAM&site=Technology">
globetechnology.com reported</a>
Judiciary Committee spokeswoman Mimi Devin as saying that not one email in
support of the bill had been received. This would seem to indicate that
the only people who can benefit from the bill are those who helped draw it
up. Additionally, a number of websites (such as
<a href="http://www.eff.org/">
EFF</a>
and
<a href="http://digitalconsumer.org/">
DigitalConsumer.org</a>) have served as rallying points for those opposed
to the introduction of these laws, and it is very difficult to find any
pro-CBDTPA online presence outside of corporate webpages. A recent
<a href="http://linuxandmain.com/essay/craymond.html">
article</a>
by Catherine Olanich Raymond provides a reasoned and legally informed
analysis of the principles behind this broad opposition.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">DMCA
</FONT>
</H3>
Although the DMCA is very detrimental to consumers, it should not be
forgotten that it poses serious risks to scientific research also. This
was seen clearly in the case of
<a href="http://www.eff.org/IP/Emulation/Blizzard_v_bnetd/20020408_eff_bnetd_pr.html">
Edward Felten vs the RIAA</a>.
A reminder was provided by the IEEE's decision to require researchers
submitting journal papers to
<a href="http://slashdot.org/article.pl?sid=02/04/14/166232&mode=thread">
guarantee that the work</a>
did not violate the DMCA.
As
<a href="http://www.newscientist.com/">
New Scientist</a>
later
<a href="http://www.newscientist.com/news/news.jsp?id=ns99992169">
reported</a>, this decision was reversed due to popular opposition.
However, as
<a href="http://slashdot.org/articles/02/04/17/1649201.shtml?tid=167">
pointed out</a> on Slashdot, it is regrettable that the reversal was based
on complaints rather than on legal arguments or rights. This is a positive
development, but hardly a vindication of scientific freedoms.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">MS Government XP
</FONT>
</H3>
<a href="http://seattletimes.nwsource.com/text/134438173_passport18.html">
The Seattle Times reported</a>
that the US federal government is considering the use of Microsoft's
Passport technology to verify the online identity of American citizens.
This would allow citizens to authenticate themselves at government websites
where they might deal with such business as paying taxes or learning about
their entitlements. This would obviously be an incredible coup for
Microsoft, who
<a href="http://www.theregister.co.uk/content/6/24923.html">
The Register reports</a>,
have been pushing hard for popular adoption of Passport technology. It
also forms part of a broad plan to persuade governments to base their IT
infrastructure around Microsoft products. This has had
<a href="http://www.theregister.co.uk/content/4/24882.html">
significant success</a>
in the United Kingdom.
<a name="links"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">Linux Links</font></H3></center>
<p>
<IMG ALT="Linux Focus" SRC="../gx/linuxfocus.jpg" WIDTH="143" HEIGHT="45">
<BR CLEAR="all">
The following articles are in the May/June issue of the E-zine
<A HREF="http://www.linuxfocus.org/">LinuxFocus</A>:
<ul>
<li><a href="http://linuxfocus.org/English/May2002/article236.shtml">A LCD control panel for your Linux server</a><br></li>
<li><a href="http://linuxfocus.org/English/May2002/article240.shtml">Using a Minolta Dimage 5 camera under Linux</a><br></li>
<li><a href="http://linuxfocus.org/English/May2002/article241.shtml">GNUMail.app, the portability evidence</a><br></li>
<li><a href="http://linuxfocus.org/English/May2002/article242.shtml">Getting to know XML</a><br></li>
<li><a href="http://linuxfocus.org/English/May2002/article243.shtml">Introduction to cryptography</a><br></li>
<li><a href="http://linuxfocus.org/English/May2002/article244.shtml">Discover the universe</a><br></li>
<li><a href="http://linuxfocus.org/English/May2002/article246.shtml">Trying out KDE3</a><br></li>
<li><a href="http://linuxfocus.org/English/May2002/article247.shtml">Replacing a Windows NT/2000 server using Linux and SAMBA</a><br></li>
</UL>
<P>
<a href="http://www.linuxjournal.com/article.php?sid=6008">
An interview</a>
at Linux Journal about the Linux movement and Linux Users Groups in India.
<P>
Also at Linux Journal,
<a href="http://www.linuxjournal.com/article.php?sid=6017">
Linux WiFi Router</a>
brings in Subscribers for Ghana's Largest ISP.
<P>
Slashdot links:
<LI> Does Senator Hollings have his good side after all?
<a href="http://slashdot.org/yro/02/04/19/1551240.shtml?tid%103">Early reports</A>
of his net privacy bill seemed to suggest so, but
<A
HREF="http://www.salon.com/tech/feature/2002/04/26/hollings_spyware/index.html">a
later Salon article</A> thinks it's just business as usual: make a bil that pretends
to safeguard people's privacy, but actually gives it to the marketers on a platter.
Not your "sensitive" information (medical history, race, religion, political
affiliation, etc), but your "nonsensitive" information--which includes your name,
address, and anything you buy over the Internet. Fortunately for the marketers,
this "nonsensitive" information is precisely what they want. Unfortunately for
individual privacy, one can make a fairly good guess what your medical history,
race, religion and political affiliation is just by analyzing what you buy and
which web pages you read. So, is there anything good about this bill after all?
At press time, it's too early to say.
<LI> Microsoft FUD notwithstanding, the SAMBA team is
<A HREF="http://us1.samba.org/samba/ms_license.html">not affected</A> by a
recent MS licence on a technical document related to the CIFS protocol (the license
forbids the information from being used in GPL code) and two patents related to
the CIFS protocol, because SAMBA doesn't use that implementation anyway.
<LI> Microsoft lawyer says Linux "<A HREF="http://slashdot.org/articles/02/04/29/1639219.shtml?tid=109">is not piracy</A>"
during a European conference on software piray. Slashdot contributor dipfan
notes the article "it quotes Microsoft's top in-house lawyer Brad Smith as saying: 'Linux is a way of developing software whereas piracy is copying.'"
</UL>
IBM developerWorks
<a href="http://www-106.ibm.com/developerworks/linux/library/l-share2?Open&t=grl,l7,p=shar2">
article</a>
on sharing computers, comparing SSH, remote X, VNC, and other technologies
as ways of remotely running applications.
<p>
A couple of links which might be of use when considering new hardware
purchases are
<a href="http://www.linux.org/hardware/components.html">
Linux.org's hardware list</a>
and
<a href="http://lhd.datapower.com/">
The Linux Hardware Database</a>.
Slashdot also recently ran a
<a href="http://slashdot.org/askslashdot/02/04/23/2149241.shtml?tid=106">
story</a>
on hardware manufacturers that actively support Linux.
<p>
Some links from
<a href="http://lwn.net/">
Linux Weekly News</a>
<ul>
<li>
<a href="http://lwn.net/2002/features/rms.php3">
Interview</a>
with Richard Stallman, clearing up some misconceptions about his views.
Interestingly, he also says the Free Software Foundation may have to
move out of the US if the CBDTPA (SSSCA) is enacted.
</li>
<li>
Unix
<a href="http://lwn.net/2002/0404/">
gets Microsoft and Unisys good</a>.
MS and Unisys run an ad campaign called "We have the way out",
describing Unix as an expensive trap, so naturally... the campaign's
web site is
<a href="http://news.com.com/2100-1001-874132.html">
running Free BSD</a>!
A hasty move to a Windows system (IIS according to Netcraft), failed so
badly that
<a href="http://www.wehavethewayout.com/">
the site</a>
was down for several days.
</li>
<li>
Jim Dennis (the Answer Guy!)
<a href="http://lwn.net//2002/0404/letters.php3">
nominates</a>
Senator Fritz Hollings (the CBDTPA/SSSCA Guy) for the post of Grand
Software Source Code Dictator. Meanwhile Leon Brooks offers the
"community baseball diamond" analogy for the CBDTPA/SSSCA (Subject:
Disney hates baseball, film at 11?).
</li>
<li>
Eric Raymond
<a href="http://zdnet.com.com/2100-1104-871395.html">
says (in an interview with ZDNet)</a>,
"Linux will take over the desktop, ... whether we clean up and polish
our interfaces or not." and "[Linux's UI] doesn't suck."
</li>
</ul>
<p>
Some links from
<a href="http://slashdot.org/">
Slashdot</a>:
<ul>
<li>
O'Reilly
<a href="http://www.oreillynet.com/pub/a/network/2002/04/02/lessig.html">
interview</a>
with Lawrence Lessig on the future of the public domain.
</li>
<li>
<a href="http://slashdot.org/article.pl?sid=02/04/24/2226241&mode=nested&tid=106">
Story</a>
about the decision
<a href="http://www.dreamworks.com/">
Dreamworks</a>
made to
<a href="http://newsforge.com/newsforge/02/04/24/1643238.shtml?tid=23">
port all of their front-end servers and workstations to Linux</a>.
</li>
<li>
Microsoft has
<a href="http://www.nytimes.com/2002/04/11/technology/11NET.html">
backed off</a>
Hailstorm, saying that it could not find any partners (merchants)
willing to commit to the program. "Microsoft was unable to persuade
either consumer companies or software developers that it had solved all
of the privacy and security issues raised by the prospect of keeping
personal information in a centralized repository."
</li>
<li>
Charmed
<a href="http://www.charmed.com/products/catalog/catalog.php">
announces</a>
Transmeta Crusoe-based Linux Wearable.
</li>
</ul>
<P>
Some links from the O'Reilly stable of websites:
<ul>
<li>
An
<a href="http://www.onlamp.com/pub/a/onlamp/excerpt/ssh_11/index2.html">
excerpt</a>
from "SSH: The Secure Shell", in which the
authors introduce the Session Control Protocol, SCP, and show how
to use it through a gateway.
</li>
<li>
An
<a href="http://linux.oreillynet.com/pub/a/linux/2001/09/20/enterprise.html">
introduction</a> to wireless Linux, and also a
<a href="http://linux.oreillynet.com/pub/a/linux/2002/04/11/enterprise.html">
guide</a>
to configuring the Apple AirPort base station from Linux.
</li>
<li>
<a href="http://www.oreillynet.com/pub/a/mac/2002/03/29/ibook_linux.html">
Installing</a>
Debian on an iBook.
</li>
<li>
<a href="http://www.oreillynet.com/pub/a/network/2002/04/16/cory.html">
The Law of Unintended Consequences</a>:
"...the measure of a product's success is how far it diverges from its
creator's intentions."
</li>
<li>
The Body Electronic: An
<a href="http://www.oreillynet.com/pub/a/network/2002/04/12/morris.html">
Interview</a>
With IBM's Robert Morris, discussing autonomic computing.
</li>
<li>
<a href="http://linux.oreillynet.com/pub/a/linux/2002/04/18/pam2.html">
Writing PAM-Capable Applications</a>, Part Two
Jennifer Vesperman covers how to call PAM authentication, account
management, session management, and token-changing functions.
</li>
</ul>
<P>
Some interesting stories from the The Register:
<ul>
<li>
Microsoft
<a href="http://www.theregister.co.uk/content/4/24852.html">
to introduce</a>
Windows-only 'Soft Wi-Fi' 802.11x system.
</li>
<li>
Microsoft anti-GPL fine print
<a href="http://www.theregister.co.uk/content/4/24885.html">
threatens competition</a>. Could spell trouble for Samba.
</li>
<li>
Gates: GPL
<a href="http://www.theregister.co.uk/content/4/24970.html">
will eat your economy</a>, but BSD's cool. Also,
<a href="http://www.theregister.co.uk/content/4/24990.html">
interesting testimony</a>, how
<a href="http://www.theregister.co.uk/content/4/24982.html">
windows is best</a>, and
<a href="http://www.theregister.co.uk/content/4/24974.html">
impending armageddon</a>.
</li>
<li>
Symantec
<a href="http://www.theregister.co.uk/content/53/24952.html">
prepares Linux firewall</a>
for IBM iSeries.
</li>
</ul>
<p>
<a href="http://www.linuxtoday.com/">
Linux Today</a> have highlighted several interesting links over the past
month:
<ul>
<li>
MSNBC on
<a href="http://www.msnbc.com/news/737744.asp">
Linux for the Masses</a>.
</li>
<li>
Linux and Main reported that Marcelo Tosatti, Linux-2.4 kernel
maintainer, was
<a href="http://www.linuxandmain.com/news/marcelo.html">
deported by U.S. Immigration</a>
due to visa problems.
</li>
<li>
The Jones School of Management at Rice University in Houston is
<a href="http://www.surveypro.com/cgi-bin/surveypro/run_survey.cgi?id=2444">
researching social interactions</a>
online and in particular how communities organized around products or
brands (such as Linux). They would like Linux users to complete an
online questionnaire.
</li>
<li>
Newsforge story on Linux and
<a href="http://newsforge.com/newsforge/02/04/17/025205.shtml?tid=8">
the art of 3D game programming</a>
</li>
<li>
Linux Planet have published
<a href="http://www.linuxplanet.com/linuxplanet/tutorials/4161/1/">
an introduction</a>
to the area of Linux package management.
</li>
<li>
A LinuxSecurity.com
<a href="http://www.linuxsecurity.com/feature_stories/ids-active-response.html">
article</a>
on how a system should react when the intrusion detection system says
something's awry.
</li>
</ul>
<a name="conferences"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">Upcoming conferences and events</font></H3></center>
<P> Listings courtesy <EM>Linux Journal</EM>. See <EM>LJ</EM>'s
<A HREF="http://www.linuxjournal.com/events.php">Events</A> page for the
latest goings-on.
<!-- *** BEGIN events table [this line needed by Linux Gazette events.py *** -->
<table cellpadding=5 border=0 width=100%>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>Networld + Interop (Key3Media)</b><BR>
<td valign=top>May 7-9, 2002<BR>Las Vegas, NV<BR>
<a href="http://www.key3media.com/" target="_blank">
http://www.key3media.com/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>IBM developerWorks Live!</br><BR>
<td valign=top>May 7-10, 2002<BR>San Francisco, CA<BR>
<a href="http://www-3.ibm.com/events/ibmdeveloperworkslive/index.html" target="_blank">
http://www-3.ibm.com/events/ibmdeveloperworkslive/index.html</a><br>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>Strictly e-Business Solutions Expo (Cygnus Expositions)</b><BR>
<td valign=top>May 8-9, 2002<BR>Minneapolis, MN<BR>
<a href="http://www.strictlyebusiness.net/strictlyebusiness/index.po?" target="_blank">
http://www.strictlyebusiness.net/strictlyebusiness/index.po?</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>O'Reilly Emerging Technology Conference (O'Reilly)</b><BR>
<td valign=top>May 13-16, 2002<BR>Santa Clara, CA<BR>
<a href="http://conferences.oreillynet.com/etcon2002/" target="_blank">
http://conferences.oreillynet.com/etcon2002/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>Embedded Systems Conference (CMP)</b><BR>
<td valign=top>June 3-6, 2002<BR>Chicago, IL<BR>
<a href="http://www.esconline.com/chicago/" target=_"blank">
http://www.esconline.com/chicago/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>USENIX Annual (USENIX)</b><BR>
<td valign=top>June 9-14, 2002<BR>Monterey, CA<BR>
<a href="http://www.usenix.org/events/usenix02/" target="_blank">
http://www.usenix.org/events/usenix02/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>PC Expo (CMP)</b><BR>
<td valign=top>June 25-27, 2002<BR>New York, NY<BR>
<a href="http://www.techxny.com/" target="_blank">
http://www.techxny.com/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>O'Reilly Open Source Convention (O'Reilly)</b><BR>
<td valign=top>July 22-26, 2002<BR>San Diego, CA<BR>
<a href="http://conferences.oreilly.com/" target="_blank">
http://conferences.oreilly.com/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>USENIX Securty Symposium (USENIX)</b><BR>
<td valign=top>August 5-9, 2002<BR>San Francisco, CA<BR>
<a href="http://www.usenix.org/events/sec02/" target="_blank">
http://www.usenix.org/events/sec02/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>LinuxWorld Conference & Expo (IDG)</b><BR>
<td valign=top>August 12-15, 2002<BR>San Francisco, CA<BR>
<a href="http://www.linuxworldexpo.com" target="_blank">
http://www.linuxworldexpo.com</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>LinuxWorld Conference & Expo Australia (IDG)</b><BR>
<td valign=top>August 14 - 16, 2002<BR>Australia<BR>
<a href="http://www.idgexpoasia.com/" target="_blank">
http://www.idgexpoasia.com/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>Communications Design Conference (CMP)</b><BR>
<td valign=top>September 23-26, 2002<BR>San Jose, California<BR>
<a href="http://www.commdesignconference.com/" target="_blank">
http://www.commdesignconference.com/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
<tr><td valign=top>
<b>Software Development Conference & Expo, East (CMP)</b><BR>
<td valign=top>November 18-22, 2002<BR>Boston, MA<BR>
<a href="http://www.sdexpo.com/" target="_blank">
http://www.sdexpo.com/</A><BR>
<tr><td colspan=2><HR size=5 width=100% noshade align=center></td></tr>
</table>
<!-- *** END events table [this line needed by Linux Gazette events.py *** -->
<a name="general"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">News in General</font></H3></center>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Lindows Controversy
</FONT>
</H3>
<P>
<a href="http://www.lindows.com/">
Lindows</a> is not only in legal wrangles
<a href="http://seattletimes.nwsource.com/html/businesstechnology/134430414_lindows03.html">
with Microsoft</a>,
but has now run foul of the
<a href="http://www.gnu.org/fsf/fsf.html">
Free Software Foundation</a>.
It would appear that Lindows has been
<a href="http://linux.com/article.pl?sid=02/04/11/148251">
somewhat casual</a>
about distributing source code for their products.
Bruce Perens has written an
<a href="http://www.lwn.net/daily/perens-robertson.php3">
open letter</a>
to Michael Robertson (Lindows CEO) calling on the company to be honest
partners in the free software endeavor.
<a href="http://www.monolinux.com/">Mono Linux</a>
has published a report and analysis of Lindows, available in two parts
(
<a href="http://www.monolinux.com/modules/news/article.php?storyid=103">
one</a> and
<a href="http://www.monolinux.com/modules/news/article.php?storyid=105">
two</a>).
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">New version of the IP Masquerade HOWTO is available
</FONT>
</H3>
<P>
<a href="http://www.ecst.csuchico.edu/~dranch">
David Ranch</a> has announced the release of the
<a href="http://www.ecst.csuchico.edu/~dranch/LINUX/index-linux.html#ipmasq">
IP Masquerade HOWTO</a>.
<P> Recent changes include:
<ul>
<li>
Updated all the various chapters to use human readable file names
vs. things like "x2623.html".
</li>
<li>
init.d-style startup scripts for the rc.firewall rulesets.
</li>
<li>
Expanded the IPMASQ accounting section.
</li>
<li>
Many updated URL's.
</li>
<li>
Fixed the $PORTFWIP bug.
</li>
</ul>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">$20m Compaq Linux Win
</FONT>
</H3>
<P>
<a href="http://www.compaq.com/">
Compaq Computer Corporation</a>
have announced a three-year, $20 million agreement with
RackShack,
the hosting services arm of
of
<a href="http://www.ev1.net">
Everyones Internet</a>.
Compaq will equip RackShack's IT data centers with
industry-standard Compaq ProLiant servers for a tier one,
<a href="http://www.compaq.com/linux">
Linux-based</a>
Web hosting solution.
<a name="distro"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">Distro News</font></H3></center>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Debian
</FONT>
</H3>
<P>
<a href="http://www.debian.org/vote/2002/platforms/bdale">
Bdale Garbee</a>,
an Engineer/Scientist in the Linux Systems Operation group for
Hewlett-Packard, has
<a href="http://www.debian.org/vote/2002/vote_0001">
been elected</a>
Debian project leader.
<P>
<hr noshade width="20%">
<P>
Debian Weekly News
<a href="http://www.debian.org/News/weekly/2002/17/">
recently reported</a>
that Nathan Hawkins has
<a href="http://lists.debian.org/debian-bsd-0204/msg00021.html">
announced</a>
a new base tarball for those who would like to see Debian GNU/FreeBSD live.
The status of this port is
<a href="http://people.debian.org/~utsl/freebsd-i386/status.html">
available here</a>.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Gentoo
</FONT>
</H3>
<P>
<a href="http://www.linuxplanet.com/">
Linux Planet</a> have recently
<a href="http://www.linuxplanet.com/linuxplanet/reviews/4149/1/">
reviewed</a>
<a href="http://www.gentoo.org">
Gentoo Linux</a>, a source based distribution aimed at people comfortable
with software development (among others).
<p>
Gentoo can also be installed on the PPC platform, and has been
<a href="http://www.imaclinux.net/plain_page.php?caller=imaclinux.php3+record=94">
reviewed</a> by iMacLinux (link courtesy Linux Today).
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Hancom
</FONT>
</H3>
<P>
<a href="http://www.linuxandmain.com/">
Linux and Main</a> have an
<a href="http://www.linuxandmain.com/features/decrem.html">
interview</a>
with Bart Decrem, co-founder of Eazel (producers of the Nautilus graphical
shell for GNOME) and vice president of Hancom Linux. Decrem discusses
software in Korea, why companies and governments outside the US don't want
to become too dependent on Microsoft, and more.
Also
<a href="http://slashdot.org/article.pl?sid=02/04/25/0122208&mode=nested&tid=163">
featured</a>
on Slashdot. While on the subject of Hancom Linux, Linux and Main
<a href="http://www.linuxandmain.com/news/hancomarab.html">
also reported</a>
that Hancom Linux is shipping what is believed to be the first
Arab-language Linux distribution.
As
<a href="http://www.osnews.com/story.php?news_id=969">
reported by OSNews</a>,
Hancom have now completely focused on the Linux platform for their Hancom
Office productivity suite.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">SOT Linux
</FONT>
</H3>
<P>
Linux Today have the
<a href="http://linuxtoday.com/news_story.php3?ltsn=2002-04-24-016-26-PR-SW">
story</a>
that SOT, publisher of Best Linux, has announced a change of name for its
Linux distribution to coincide with the release of a new version of the
distro. In future it will be known as SOT Linux.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">SuSE
</FONT>
</H3>
<P>
<a href="http://www.suse.de/en/">
SuSE Linux</a>
and
<a href="http://www.ibm.com/">
IBM</a>
have announced a broad services alliance that will enable
both companies to jointly provide Linux support and services to
corporate customers around the world.
In the agreement,
<a href="http://www.ibm.com/services">
IBM Global Services</a>
and SuSE will collaborate on support and professional services. IBM will
package and support turnkey implementations of SuSE Linux Enterprise
Server, backed by SuSE's expert development, maintenance, and support
teams. In addition to this complete services offering, the two
organizations will also collaborate on customer engagements and supplement
each other's skills to provide a formidable Linux services delivery
capability for corporate customers.
<p>
<hr noshade width="20%">
<p>
Slashdot ran the
<a href="http://slashdot.org/articles/02/04/23/1326223.shtml?tid3">
story</a> that
SuSE 8.0 has shipped, and now includes KDE 3.0, kernel 2.4.18, and various
other upgrades/enhancements.
<a name="commercial"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="green">Software and Product News</font></H3></center>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Mammoth PostgreSQL Released
</FONT>
</H3>
<P>
Mammoth PostgreSQL from
<a href="http://www.commandprompt.com/">
Command Prompt, Inc.</a>
is an SQL-compatible Object Relational Database Management
System (ORDBMS). It is designed to give small to medium size businesses the
power, performance, and open-standard support they desire. 100% compatible
with the PostgreSQL 7.2.1 release, Mammoth PostgreSQL provides a
commercially-supported PostgreSQL distribution for Solaris, MacOS X and Red
Hat Linux x86 platforms. Mammoth PostgreSQL ships with built-in support
for SSL connectivity (Native and ODBC), as well as programming APIs for
C/C++, Perl, and Python. There are one-time and subscription-based
licensing models available for immediate purchase.
<P>
Command Prompt, Inc., provides support, custom programming, and
services for PostgreSQL. Service contracts, as well as time and materials
support are available, allowing for single-point accountability for a
customer's database solution.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Linux Growth Spurs Tool Sales for Etnus
</FONT>
</H3>
<P>
<a href="http://www.etnus.com">
Etnus</a>,
a supplier of debuggers for complex code, have announced record-breaking
sales of its TotalView debugger on Intel Linux platforms, linking the sales
to increased development of complex and mission critical codes on Linux
systems. Both sales volume and number of licenses sold for the Etnus
TotalView debugger on Intel Linux platforms doubled over first quarter 2001
and, for the first time, Etnus reported that Linux was the top-selling
platform. Etnus TotalView is a cross-platform, state of the art debugger
supporting C/C++ and Fortran.
<P>
Etnus believes Linux will continue to be a leader among the many
platforms they support and will continue to expand functionality there. The
next release of TotalView will add support for GCC 3.X and the Intel
compilers for Linux.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">CylantSecure
</FONT>
</H3>
<p>
CylantSecure is an intrusion detection system for Linux and other Unix
variants that stops attacks before they occur by monitoring the behavior of
the operating system. It has been developed and produced by
<a href="http://www.cylant.com">
Cylant</a>,
a division of Software Systems International. By adding instrumentation to
the kernel, Cylant is enabled to benchmark server behavior patterns and
detect changes in those patterns during operation. If an abnormal behavior
occurs, it can be stopped in real time, preventing attacks before they are
executed.
<P> This technique is based on the principle that most attacks change the
behavior of the software being exploited in a measurable way. CylantSecure
uses sensors to monitor the behavior of the software, along with a
statistical analysis engine to identify any abnormalities in the behavior.
Through continuous behavioral monitoring, CylantSecure can send
administrators early warning of attacks, so appropriate measures can be
taken. Such measures might include shutting down the program, shunning
traffic from the attacking IP or performing system state analysis.
<p>
Get more information on the
<a href="http://www.cylant.com">
Cylant website</a>.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Opera 6.0 for Linux Beta 2 Released
</FONT>
</H3>
<P>
<a href="http://www.opera.com">
Opera Software ASA</a>
have released Opera
6.0 for Linux Beta 2 with improved features and looks to increase the
speed and enjoyment of Linux users worldwide. The earlier version of Opera
for Linux, Opera 5, has reached a milestone of one million successful
downloads and installations.
<P>
For a complete changelog of Opera 6.0 for Linux Beta 2, please visit
<a href="http://www.opera.com/linux/changelog/">
http://www.opera.com/linux/changelog/</a>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">McObject's eXtremeDB 2.0
</FONT>
</H3>
<P>
<a href="http://www.mcobject.com">
McObject</a>
has released version 2.0 of its
eXtremeDB
small footprint, main memory database on Linux, with new features to
improve developer flexibility and enhance the run-time capabilities of
applications based on eXtremeDB.
McObject built eXtremeDB from scratch to meet the CPU and RAM
constraints of intelligent, connected devices while offering dramatic
performance improvements over traditional disk-based database systems.
Enhancements in version 2.0 include:
<P>
An evaluation version of eXtremeDB 2.0 is available from
<a href="http://www.mcobject.com/download">
www.mcobject.com/download</a> for free download.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Mozilla
</FONT>
</H3>
<P>
<a href="http://www.mozilla.org/">
Mozilla</a>
1.0 release candidate 1 has been
<a href="http://www.mozilla.org/releases/mozilla1.0/">
released</a>.
This is a trial run for the upcoming 1.0 release, and is a good indicator
of how close that day is. Indeed, Mozilla even managed to
<a href="http://www.time.com/time/magazine/article/0,9171,1101020429-232589,00.html">
attract the attention</a>
of
<a href="http://www.time.com/">
Time Magazine</a>,
which reported on the possibility that a Mozilla release could break the
browser war armistice.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Arkeia Releases A New Version 5 Beta
</FONT>
</H3>
<P>
<a href="http://www.arkeia.com">
Arkeia Corporation</a>
has released a new Arkeia 5 Beta version. Arkeia Version 5 will be the
successor of Version 4.x, a high performance, multiple-platform backup
software with 90,000 worldwide users. Arkeia 5, will feature a completely
rewritten program architecture and will include an assortment of new
features requested by users.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Other software
</FONT>
</H3>
<P>
Apache 2.0
<a href="http://httpd.apache.org/">
is now, officially, stable</a>.
<P>
Galeon 1.2.1 has
<a href="http://galeon.sourceforge.net/news/index.php#39">
been released</a>
<P>
AbiWord 1.0
<a href="http://lwn.net/2002/0425/">
is out</a>
<P>
The new version of Mailman, (version 2.0.10)
<a href="http://lwn.net/2002/0425/a/mailman2010.php3">
is now available</a>.
<!-- *** BEGIN copyright *** -->
<P> <hr> <P>
<H5 ALIGN=center>
Copyright © 2002, Michael Conry and
the Editors of <A HREF="mailto:gazette@ssc.com"><I>Linux Gazette</I></A>.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more <font COLOR="red">lovable!</font></i>"
<img ALT="" SRC="../gx/adam/heart.png" WIDTH="30" HEIGHT="25">
</H4>
<!-- END header -->
<p> <hr> <p> <!--===================================================================-->
<p ALIGN=CENTER><img ALT="[picture of mechanic]" SRC="../gx/adam/mechanic.png" ALT="Weekend Mechanic Logo" ALIGN=BOTTOM WIDTH=399 HEIGHT=135 BORDER=0></p>
<h1 ALIGN=CENTER><font COLOR="maroon">The Weekend Mechanic</font></h1>
<h4 ALIGN=CENTER>By <a HREF="mailto:thomas_adam16@yahoo.com">Thomas
Adam</a></h4>
<p> <hr> <p> <!--===================================================================-->
<!-- END header -->
<!-- =======================================================================-->
<!-- --------------- -->
<!-- BEGIN: contents -->
<!-- --------------- -->
<UL>
<LI><A HREF="#preamble">Welcome to the May edition</A></LI>
<LI><A HREF="#squid">A brief Introduction: Squid</A></LI>
<LI><A HREF="#squidg">A brief Introduction: SquidGuard</A></LI>
<LI><A HREF="#keyfiles">Keyfiles: A handy BASH backup script</A></LI>
<LI><A HREF="#prognedit">Program Review: Nedit</A></LI>
<LI><A HREF="#closet">Closing Time</A></LI>
</UL>
<!-- --------------- -->
<!-- END: contents -->
<!-- --------------- -->
<HR>
<! -- ======================================================================= -->
<! -- --------------- -->
<! -- BEGIN: preamble -->
<! -- --------------- -->
<H2><A NAME="preamble">Welcome to the May edition</A></H2>
<FONT COLOR="red"><P><I>
[ ** This edition is dedicated to a very dear friend of mine called <B>Natalie
Wakelin</B>, who I am indebted to for helping me recently. She has been an
absolute star and true friend to me, and although she may not understand a
word this "technical" document may have to offer -- I dedicate it to
her all the same. Thanks Natalie!! :-) ** ]
</FONT></I></P>
<HR Width=25%>
<I>
What song the Syrens sang<BR>
or what name Achilies assumed<BR>
when he hid himself among women, <BR>
although puzzling questions <BR>
are not beyond all conjecture <BR>
<BR>
--Sir Thomas Browne <BR>
Taken from:<I> "The Murders in the Rue Morgue" -- Edgar Allan Poe</I>
</I>
<HR WIDTH=25%>
<P>Yes, yes, I know. You can stop clapping and applauding. I'm back :-)
Seriously, I can only apologise for the "holiday" that the LWM has taken
over the past "couple" of months. I have taken rather a large
leap into the world of freedom and University life, and I found it more
difficult to adjust to than I had originally anticipated!!</P>
<P>But that is by the by.....</P>
<P>For the keen eyed among you, the quote at the top of this column rather
sums up the userability of Linux overall. Indeed, no matter how strange a
problem may appear to be within Linux, it is not beyong the realm of
possibility that it cannot be solved by using Linux. I have been finding
that out for myself quite a lot recently :-)</P>
<P>Aside from all the University work, I have been actively helping out
with problems at the <A HREF="http://www.hants.lug.org.uk" TARGET="_blank">
Hants LUG</A>, both in person and via their mailing list. Actually it has
been quite exciting. I have also learn a lot!!</P>
<P>Well that is enough preamble for one month. Enjoy this issue, won't
you?</P>
<!-- ============= -->
<!-- END: preamble -->
<!-- ============= -->
<HR>
<!-- ======================================================================== -->
<!-- ============= -->
<!-- BEGIN: squid -->
<!-- ============= -->
<H2><A NAME="squid">A Brief Introduction: Squid</A></H2>
<!-- --------------------- -->
<!-- BEGIN: squid contents -->
<!-- --------------------- -->
<UL>
<LI><A HREF="#wsquid">What is Squid?</A></LI>
<LI><A HREF="#sqinst">Installation</A></LI>
<LI><A HREF="#squidconf">Configuration</A></LI>
<LI><A HREF="#filtering">Filtering (Access Control)</A></LI>
<LI><A HREF="#initsquid">Initialising Squid</A></LI>
</UL>
<HR>
<!-- ==================== -->
<!-- END: squid: contents -->
<!-- ==================== -->
<!-- =================== -->
<!-- ==================== -->
<!-- BEGIN: squid: wsquid -->
<!-- ==================== -->
<H2><A NAME="wsquid">What is Squid?</A></H2>
<P>Those of you who read the <A HREF="http://www.linuxgazette.com/issue70/adam.html#apache"
TARGET="_blank"> September</A> edition will remember that I wrote an article
about the use of <I>Apache</I>. I had some nice feedback on that (thanks to
all who sent their comments). I thought it a nice idea to do a tutorial on
<I>squid</I>.</P>
<P>For those of you who don't know, <A HREF="http://www.squid-cache.org"
TARGET="_blank"><I>Squid</I></A> (other than being a sea
creature) is a Linux internet proxy program. Why is it called
<I>squid</I>? Apparently because (quote: "all the good names were taken")</P>
<P>Squid, works by channelling internet requests through a machine (called a proxy
server).
<P>Furthermore, squid offers the ability to <A HREF="#filtering">filter</A>
certain webpages, to either allow or disallow viewing. The ability to do this is
through ACLs (Access Control Lists). More on these later.</P>
<!-- ================== -->
<!-- END; squid: wsquid -->
<!-- ================== -->
<HR WIDTH=25%>
<!-- --------------------- -->
<!-- =================== -->
<!-- BEGIN: squid sqinst -->
<!-- =================== -->
<H2><A NAME="sqinst">Installation</A></H2>
<P>Installing squid <I>should</I> be straight forward enough. Squid is supplied
with all major distributions (RedHat, SuSE, Caldera, Debian, etc) so it should
be easily accessible from your distribition CD's.</P>
<P>For those of you that have a Linux distribution that supports the <B>RPM</B>
format, you can check to see if you already have it installed, by using the
following command:</P>
<PRE>rpm -qa | grep -i squid</PRE>
<P>If it is installed, then you should find that "squid2-2.2.STABLE5-190"
(or similar) is returned. If you get no responce then install squid from your
distibution CD.</P>
<P>If squid is not on your distribution CD, or you are using a version of Linux
(such as Debian and Slackware) that does not support the RPM format, then
download the source in .tgz (tar.gz) format from
<A HREF="http://www.squid-cache.org" TARGET="_blank">http://www.squid-cache.org/download</A>.
<P>To install Squid from its sources copy the tar ball to "/tmp" and then issue the
following commands:</P>
<PRE>
1. If you are not user "root", su, or log in as root
2. cd /tmp
3. tar xzvf ./name_of_squid.tar.gz -- [or possibly .tgz]
4. Now run:
./configure
5. After which, you should have no errors. Then you can simply type:
make && make install
to compile and install the files.
</PRE>
<P>Typically. from a standard RPM installation, these directories will be used:</P>
<PRE>
/usr/bin
/etc
/etc/squid (possibly -- used to be under RH 5.0)
/var/squid/log/
[/usr/local/etc] <-- perhaps symlinked to "/etc"
</PRE>
<P>If you're compiling it from source, then a lot of the files will end up in:</P>
<PRE>
/etc
/etc/squid (possibly -- used to be under RH 5.0)
/usr/local/bin
/var
[/usr/local/etc] <-- perhaps symlinked to "/etc"
</PRE>
<P>Suffice to say, it does not really matter, but unless you specifically have
requested otherwise, this is where the files will end up.</P>
<P>Now that you have squid installed, let us move onto the next section....
configuration</P>
<!-- ================== -->
<!-- END; squid: sqinst -->
<!-- ================== -->
<HR WIDTH=25%>
<!-- --------------------- -->
<!-- ======================= -->
<!-- BEGIN: squid: squidconf -->
<!-- ======================= -->
<H2><A NAME="squidconf">Configuration</A></H2>
<P>So, you've installed squid, and are wondering...."Is that it?" ha --
if only it were true, gentle reader. Nope....there are lots of things still to do
before we can have ourselves a good old proxy server.</P>
<P>Our efforts now shall be concentrated on one file <B>/etc/squid.conf</B>. It is
this file which holds all the settings for squid. Because we will be editing this
file, I always find it a good idea, to keep a copy of the original file. So, I think
it would be a good idea, if you all issued the command:</P>
<PRE>
cp /etc/squid.conf /etc/squid.conf.orig
</PRE>
<P>And then fire up your favourite editor, and lets begin editing squid.conf</P>
<P>Actually trying to use this file to run squid "out of the box" is
impossible. There are a number of things that you'll have to configure before you can
have an up-and-running proxy server. At first glance, this file is about a mile long, but
the developers have been helpful, since the majority of the file consists of comments about
each option that is available.</P>
<P>The first thing, is to tell squid the IP address of the machine it is operating on
and at which port it is to listen to. In squid.conf, you should find a commented line
which looks like:</P>
<PRE>#http_port 3128</PRE>
<P>Uncomment this line, by deleting the leading hash (#) symbol. Now by default, the port
number 3128 is chosen. However, should you wish to tell squid to listen on a different port,
then change it!! Thus on my proxy machine, I have specified:</P>
<PRE>http_port 10.1.100.1:8080</PRE>
<P>Which binds squid to listen on the above IP address with the port 8080. What you have to be
careful of, is making sure that no other running application is trying to use the same port
(such as apache), which is a very common mistake that a lot of people make.</P>
<P>Now, as we progress through this configuration file, the next major configuration option we
should now change is <B>cache_mem</B>. This option tells squid how much memory it should use for
things like caching.</P>
<P>I have just uncommented this line -- and left the default at 8 MB</P>
<P>Further on down from this option are some more options which tell squid about the high/low
cache "watermark". This is simply a percentage of disk-space, that says that when it
gets to within 90/95% then squid should start deleting some of its cached items.</P>
<PRE>
#cache_swap_low 90
#cache_swap_high 95
</PRE>
<P>I have simply uncommented these, but I have changed their values. The reason being, is because
I have a 60 GB hard drive, one percent is hundreds of mega bytes, so I have changed the values to:</P>
<PRE>
cache_swap_low 97
cache_swap_high 98
</PRE>
<P>Right....so far so good. We have told squid on which IP and port to listen to, told it how much
memory it should use, and told it the percentage of drive space it should reach before it starts
deleting its own cached items. Great!! If you haven't do so already, save the file.</P>
<P>The next and penultimate option that I changed was quite an important one, since this one
determines the location and size of the cache directories. There is a TAG, which looks like:</P>
<PRE>
cache_dir /var/squid/cache 100 16 256
</PRE>
<P>What this says is that for the path "/var/squid/cache"each top-level directory will
hold 100MB. There will be 16 top-level directories and below that there will be 256 sub-directories
</P>
<P>The last major item that I shall be tweaking in this file, before moving on to filtering, is the
use of access logs. Just below the option we have just configured for the cache_dir, are options to
allow logging. Typically you have the option of logging the following:</P>
<UL>
<LI>access log</LI>
<LI>cache log</LI>
<LI>store log</LI>
<LI>swap log</LI>
</UL>
<P>Each of the above logs have their own advantage / disadvantage in the running of your proxy server.
Typically, the only logs that I keep are the access logs and the cache log. The reason being simply
because the store and swap logs don't interest me :-). </P>
<P>It is the access log file which logs all the requests that users make (i.e. to which website a
particular user is going to). While I was at school, this file was invaluable in determining which
user was <I>trying</I> to get to banned sites. I recommend all sysadmins that have or are going to
set-up an internet proxy server to enable this feature -- it is very useful.</P>
<P>So, I did the following (uncommenting the TAGS):</P>
<PRE>
cache_access_log /var/squid/logs/access.log
cache_log /var/squid/logs/cache.log
</PRE>
<P>I recommend that you leave the log names as they are.</P>
<P>Obviously, I have only covered the most basic options within the squid.conf file. There are a whole
mass of options for particular situations. Each option is fairly well commented, so should you wish to
see what a particular option does, it should not be too hard.</P>
<!-- ==================== -->
<!-- END squid: squidconf -->
<!-- ==================== -->
<HR WIDTH=25%>
<!-- --------------------- -->
<!-- ======================= -->
<!-- BEGIN: squid: filtering -->
<!-- ======================= -->
<H2><A NAME="filtering">Filtering (Access Control)</A></H2>
<P>This section is still using "/etc/squid.conf" but I shall go into the configuration options
for access control in a little more detail.</P>
<P>Access control gives the sysadmin a way of controlling which clients can actually connect to the
proxy server, be it via an IP address, or port, etc. This can be useful for computers that are in
a large network configuration.</P>
<P>Typically ACL's (Access Control Lists) can have the following properties to them:</P>
<UL>
<LI>src - Source i.e. client's IP addresses</LI>
<LI>dst - Destination i.e. server's IP addresses</LI>
<LI>srcdomain - Source i.e. client's domain name</LI>
<LI>dstdomain - Destination i.e. server's domain name</LI>
<LI>time - Time of day and day of week</LI>
<LI>url_regex - URL regular expression pattern matching</LI>
<LI>urlpath_regex - URL-path regular expression pattern matching, leaves out the protocol and hostname</LI>
<LI>proxy_auth - User authentication through external processes </LI>
<LI>maxconn - Maximum number of connections limit from a single client IP address</LI>
</UL>
<P>All access controls have the following format to them:</P>
<PRE>
acl acl_config_name type_of_acl_config values_passed_to_acl
</PRE>
<P>Thus in the configuration file, locate the line:</P>
<PRE>
http_access deny all
</PRE>
<P>And above which, add the following lines</P>
<PRE>
acl weekendmechnetwork 10.1.100.1/255.255.255.0
http_access allow weekendmechnetwork
</PRE>
<P>You can change the acl name of "weekendmechnetwork" to a name of your choice.
What this does, is it says that for the acl with the name "weekendmechnetwork",
use the specified IP address 10.1.100.1 (the proxy server), with a netmask of 255.255.255.0
Thus, "weekendmechnetwork" is the name assigned to the clients on the network.</P>
<P>The line "http_access allow weekendmechnetwork" says that the rule is valid, and
so can be parsed by squid itself.</P>
<P>The next thing that we shall do, is look at allowing selected clients to access the internet.
This is useful for networks where not all of the machines should connect to the internet.</P>
<P>Below what we have already added, we can specify something like:</P>
<PRE>
acl valid_clients src 192.168.1.2 192.168.1.3 192.168.1.4
http_access allow valid_clients
http_access deny !valid_clients
</PRE>
<P>What this says is that for the ACL name "valid_clients" with the src IP addresses
listed, allow http access to "valid_clients" <B>(http_access allow valid_clients)</B>,
and disallow anyother IP's which are not listed <B>(http_access deny !valid_clients)</B>.</P>
<P>If you wanted to allow <I>every</I> machine Internet access, then you can specify:</P>
<PRE>
http_access allow all
</PRE>
<P>But, we can extend the ACL's further, by telling squid that certain ACL's are only active
at certain times, for example:</P>
<PRE>
1. acl clientA src 192.168.1.1
2. acl clientB src 192.168.1.2
3. acl clientC src 192.168.1.3
4. acl morning time 08:00-12:00
5. acl lunch time 12:30-13:30
6. acl evening time 15:00-21:00
7. http_access allow clientA morning
8. http_access allow clientB evening
9. http_access allow clientA lunch
10. http_access allow clientC evening
11. http_access deny all
</PRE>
<B><I>[ ** N.B. Omit the line numbers when entering the above, I've added them here to make
explaination easier -- Thomas Adam ** ]</I></B>
<P>
<B>Lines 1-3</B> set-up the ACL names which identify the machines.<BR>
<B>Lines 4-6</B> set-up ACL names for the specified time limits (24-hour format).<BR>
<B>Line 7</B> says to allow <I>clientA</I> (and only clientA) access during "morning"
hours.<BR>
<B>Line 8</B> says to allow <I>clientB</I> (and only clientB) access during "evening"
hours.<BR>
<B>Line 9</B> says to allow <I>clientA</I> (and only clientA) access during "lunch"
hours.<BR>
<B>Line 10</B> says to allow <I>clientC</I> (and only clientC) access during "evening"
hours.<BR>
<B>Line 11</B> then says that if any other client attempts to connect -- disallow it.<BR>
<P>But we can also take the uses of ACL's further, by telling Squid to match certain regexes
in the URL expression, and in effect throw the request in the bin (or more accurately --
"&>/dev/null" :-)</P>
<P>To do this, we can specify a new ACL name that will hold a particular pattern. For example</P>
<PRE>
1. acl naughty_sites url_regex -i sex
2. http_access deny naughty_sites
3. http_access allow valid_clients
4. http-access deny all
</PRE>
<B><I>[ ** Remember -- don't use the line numbers above!! ** ]</I></B>
<P>
<B>Line 1</B> says that the word "sex" is associated with the ACL name "
naughty_sites" the clause <B>url_regex</B> says that the ACL is of that type -- i.e.
it is to check the words contained within the URL. The <B>-i</B> says that it is to
ignore case-sensitivity.<BR>
<B>Line 2</B> says to deny all clients access to the website that contains anything from
the ACL "naughty_sites"<BR>
<B>Line 3</B> says to allow access from "valid_clients".<BR>
<B>Line 4</B> says to deny any other requests.
</P>
<P>So,I suppose you are now wondering...."how do I specify more than one regex?".
Well, the answer is simple....you can put them in a separate file. For example, suppose
you wanted to filter the following words, and dis-allow access to them, if they appeared
in the URL:</P>
<PRE>
sex
porn
teen
</PRE>
<P>You can add them to a file (one word at a time), say in:</P>
<PRE>
/etc/squid/bad_words.regex
</PRE>
<P>Then, in "/etc/squid.conf" you can specify:</P>
<PRE>
acl bad-sites url_regex -i "/etc/squid/bad_words.regex"
http_access deny bad_sites
http_access allow valid_clients
http-access deny all
</PRE>
<P>Which probably makes life easier!! :-). That means that you can add words to the list
whenever you need to.</P>
<P>There is also a much more easier way of filtering both regexes and domain names, by using
a program called <A HREF="#squidg">SquidGuard</A>. More about that later.....</P>
<!-- ==================== -->
<!-- END squid: filtering -->
<!-- ==================== -->
<HR WIDTH=25%>
<!-- --------------------- -->
<!-- ======================= -->
<!-- BEGIN: squid: initsquid -->
<!-- ======================= -->
<H2><A NAME="filtering">Initialising Squid</A></H2>
<P>Now we come to the most important part -- actully running squid. Unfortunately, if this is
the first ever time that you'll be initialising squid, then there are a few options that you must
pass to it.</P>
<P>Typically, the most common options that can be passed to squid, can be summed up in the following
table.</P>
<TABLE BORDER="1" ALIGN="center" WIDTH=100%>
<TH WIDTH=25% ALIGN="center">Flag</TH>
<TH WIDTH=75% ALIGN="center">Explanation</TH>
<TR>
<TD ALIGN="center">-z</TD>
<TD ALIGN="left">This creates the swap directories that squid needs. This should only ever
be used when running squid for the first time, or if your cache directories get deleted.</TD>
</TR>
<TR>
<TD ALIGN="center">-f</TD>
<TD ALIGN="left">This options allows you to specify an alternative file to use, rather
than the default "/etc/squid/conf". However, this option should be rarily used.</TD>
</TR>
<TR>
<TD ALIGN="center">-k reconfigure</TD>
<TD ALIGN="left">This option tells squid to re-load its configuration file, without stopping
the squid daemon itself.</TD>
</TR>
<TR>
<TD ALIGN="center">-k rotate</TD>
<TD ALIGN="left">This option tells squid to rotate its logs, and start new ones. This
option is useful in a cron job.</TD>
</TR>
<TR>
<TD ALIGN="center">-k shutdown</TD>
<TD ALIGN="left">Stops the execution of Squid.</TD>
</TR>
<TR>
<TD ALIGN="center">-k check</TD>
<TD ALIGN="left">Checks to ensure that the squid deamon is up and running.</TD>
</TR>
<TR>
<TD ALIGN="center">-k parse</TD>
<TD ALIGN="left">Same as "-k reconfigure".</TD>
</TR>
</TABLE>
<P>The full listing however for the available options are as follows:</P>
<PRE>
Usage: squid [-dhsvzCDFNRVYX] [-f config-file] [-[au] port] [-k signal]
-a port Specify HTTP port number (default: 3128).
-d level Write debugging to stderr also.
-f file Use given config-file instead of
/etc/squid/squid.conf
-h Print help message.
-k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse
Parse configuration file, then send signal to
running copy (except -k parse) and exit.
-s Enable logging to syslog.
-u port Specify ICP port number (default: 3130), disable with 0.
-v Print version.
-z Create swap directories
-C Do not catch fatal signals.
-D Disable initial DNS tests.
-F Foreground fast store rebuild.
-N No daemon mode.
-R Do not set REUSEADDR on port.
-V Virtual host httpd-accelerator.
-X Force full debugging.
-Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
</PRE>
<P>If you are running squid for the first time, then log in as user "root" and
type in the following:</P>
<PRE>
squid -z
</PRE>
<P>This will create the cache.</P>
<P>Then you can issue the command:</P>
<PRE>
squid
</PRE>
<P>And that's it -- you have yourself a running proxy server. Well done!!</P>
<HR>
<!-- ======================================================================== -->
<!-- ============= -->
<!-- BEGIN: squidg -->
<!-- ============= -->
<H2><A NAME="squidg">A Brief Introduction: SquidGuard</A></H2>
<!-- --------------------- -->
<!-- BEGIN: squidg contents -->
<!-- --------------------- -->
<UL>
<LI><A HREF="#wsquidg">What is SquidGuard?</A></LI>
<LI><A HREF="#sginst">Installation</A></LI>
<LI><A HREF="#sgconf">Configuration</A></LI>
</UL>
<!-- ===================== -->
<!-- END: squidg: contents -->
<!-- ===================== -->
<HR>
<!-- ===================== -->
<!-- ====================== -->
<!-- BEGIN: squidg: wsquidg -->
<!-- ====================== -->
<H2><A NAME="wsquidg">What is SquidGuard?</A></H2>
<P>SquidGuard is an external "redirect program" whereby squid actually forwards the
requests sent to itself to the external SquidGuard daemon. SquidGuard's job is to allow a
greater control of filtering than Squid itself does.</P>
<P>Although, it should be pointed out that to carry out filtering, the use of SquidGuard is not
necessary for simple filters.</P>
<!-- ===================== -->
<!-- END: squidg: wsquidg -->
<!-- ===================== -->
<HR WIDTH=25%>
<!-- ======================== -->
<!-- ====================== -->
<!-- BEGIN: squidg: sginst -->
<!-- ====================== -->
<H2><A NAME="sginst">Installation</A></H2>
<P>SquidGuard is available from (funnily enough) <A HREF="http://www.squidguard.org/download"
TARGET="_blank"> http://www.squidguard.org/download</A>. This site is very informative and
has lots of useful information about how to configure SquidGuard.</P>
<P>As per Squid, SquidGuard is available in both rpm and .tgz format.
<P>If your distribution supports the RPM format then you can install it in the following way:</P>
<PRE>
su - -c "rpm -i ./SquidGuard-1.2.1.noarch.rpm"
</PRE>
<P>Should your distribution not support the RPM format, then you can download the sources and
compile it, in the following manner:</P>
<PRE>
tar xzvf ./SquidGuard-1.2.1.tgz
./configure
make && make install
</PRE>
<P>The files should be installed in "/usr/local/squidguard/"</P>
<!-- ==================== -->
<!-- END: squidg: sginst -->
<!-- ==================== -->
<HR WIDTH=25%>
<!-- ======================== -->
<!-- ====================== -->
<!-- BEGIN: squidg: sgconf -->
<!-- ====================== -->
<H2><A NAME="sgconf">Configuration</A></H2>
<P>Before we can actually start tweaking the main "/etc/squidguard.conf", we
must first make one small change to our old friend <B>"/etc/squid.conf"</B>.
In the file, locate the TAG:</P>
<PRE>
#redirect_program none
</PRE>
<P>Uncomment it, and replace the the word "none" for the path to the main
<B>SquidGuard</B> file. If you don't know where the main file is, then you can issue
the command:</P>
<PRE>
whereis squidGuard
</PRE>
<P>And then enter the appropriate path and filename. Thus, it should now look like:</P>
<PRE>
redirect_program /usr/local/bin/squidGuard
</PRE>
<P>Save the file, and then type in the following:</P>
<PRE>
squid -k reconfigure
</PRE>
<P>Which will re-load the configuration file.</P>
<P>Ok, now the fun begins. Having told squid that we will be using a redirect program to
filter requests sent to it, we must now define rules to match that.</P>
<P>SquidGuard's main configuration file is <B>"/etc/squidguard"</B>. Out of the
box, this file looks like the following:</P>
<P ALIGN="center">-------------------</P>
<P>(<A HREF="misc/adam/squidguard.conf.txt">text version</A>)</P>
<PRE>
logdir /var/squidGuard/logs
dbhome /var/squidGuard/db
src grownups {
ip 10.0.0.0/24 # range 10.0.0.0 - 10.0.0.255
# AND
user foo bar # ident foo or bar
}
src kids {
ip 10.0.0.0/22 # range 10.0.0.0 - 10.0.3.255
}
dest blacklist {
domainlist blacklist/domains
urllist blacklist/urls
}
acl {
grownups {
pass all
}
kids {
pass !blacklist all
}
default {
pass none
redirect http://localhost/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
}
}
</PRE>
<P ALIGN="center">-------------------</P>
<P>What I shall do, is take the config file in sections, and explain what each part of it does.</P>
<PRE>
logdir /var/squidGuard/logs
dbhome /var/squidGuard/db
</PRE>
<P>The first line sets up the directory where the logfile will appear, and creates it if it
does not exist.</P>
<P>The second line sets up the directory where the database(s) of banned sites, expressions,
etc, are stored.</P>
<PRE>
src grownups {
ip 10.0.0.0/24 # range 10.0.0.0 - 10.0.0.255
# AND
user foo bar # ident foo or bar
}
</PRE>
<P>The above block of code, sets up a number of things. Firstly, the src "grownups"
is defined by specifying an IP address range, and saying which users are a member of this block.
For convenience sake, the generic terms "foo" and "bar" are used here as an
example.</P>
<P>It should also be pointed out that the <B>user</B> TAG can only be used if an ident server
is running on the server that forwards the request onto the squid proxy server, otherwise it will
be void.</P>
<PRE>
src kids {
ip 10.0.0.0/22 # range 10.0.0.0 - 10.0.3.255
}
</PRE>
<P>This section of statements sets up another block, this time called "kids" which is
determined by a range of IP addresses, but no users.</P>
<P>You can think of <B>grownups</B> and <B>kids</B> as being ACL names similar to those found in
"/etc/squid.conf".</P>
<PRE>
dest blacklist {
domainlist blacklist/domains
urllist blacklist/urls
expression blacklist/expressions
}
</PRE>
<P>This section of code is significant since it defines a <B>dest</B> list to specific filtering
processes. By processes, there are three main ways that SquidGuard applies its filtering
process:</P>
<P>1. domainlist -- lists domains, and only those, one line at a time, for example:</P>
<PRE>
nasa.gov.org
squid-cache.org
cam.ac.uk
</PRE>
<P>2. urllist -- actually specifying specific webpages (and omitting the "www.",
e.g.</P>
<PRE>
linuxgazette.com/current
cam.ac.uk/~users
</PRE>
<P>3. expression -- regex words that should be banned within the URL, thus:</P>
<PRE>
sex
busty
porn
</PRE>
<P>The last block of code:-</P>
<PRE>
acl {
grownups {
pass all
}
kids {
pass !blacklist all
}
default {
pass none
redirect http://localhost/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u
}
}
</PRE>
<P>Says that for the <B>acl</B> block, and for the "grownups" section, pass all the
requests to it -- i.e. allow those URL's / expressions, etc, that are contained witin the <B>dest
</B> blacklists.</P>
<P>Then, it says that for the "kids" section, pass all requests, <B>except</B> those
contained within the <B>dest blacklists</B>. At which point, if a URL is matched from the dest
blacklists, it is then forwarded, to the <B>default</B> section.</P>
<P>The <B>default</B> section says that if requests are found not to come from either "
grownups" or "kids" then it won't allow access to the website, and will
redirect you to another webpage, which is most likely an error page.</P>
<P>The variables passed with this redirect statement, specify the type of request, etc,
which can then be processed by a cgi-script to produce a custom error message, for example.</P>
<P>It should be pointed out that in order for filtering to take place, then the following
piece of code should be present:</P>
<PRE>
default {
pass none
}
</PRE>
<P>Either with or without the <B>redirect</B> clause.</P>
<P>There are more advanced configuration options that can be used within this file. Examples
can be found out at <A HREF="http://www.squidguard.org/configuration" TARGET="_blank">
http://www.squidguard.org/configuration</A>.</P>
<P>Thus completes the tutorial for both <B>Squid</B> and <B>SquidGuard</B>. Further
information can be found at the all of the URL's embedded in this document, and at my
website, which is at the following address:</P>
<A HREF="http://www.squidproxyapps.org.uk" TARGET="_blank">www.squidproxyapps.org.uk</A>
<!-- ==================== -->
<!-- END: squidg: sgconf -->
<!-- ==================== -->
<HR>
<!-- ======================== -->
<!-- ====================== -->
<!-- BEGIN: keyfiles -->
<!-- ====================== -->
<H2><A NAME="keyfiles">Keyfiles: A Handy BASH backup script</A></H2>
<P>OK, ok, I know you're all thinking: "Not <I>another</I> backup script".
Well, there has been some talk of this on TAG (The Answer Gang) mailing list recently
so, I thought, I'd jump on the band-wagon.....</P>
<P>This script is really quite simple -- it uses a configuration file (plain text)
which lists all of the files (and directories) that you want backed up, and then
puts them in a gzipped tarball, in a specified location.</P>
<P>Those of you who are familiar with BASH shell scripting, might find this a little
rumedial, however, I hope that my in-line comments will aid those who are still trying
to learn the shell</P>
<P ALIGN="center">-------------------</P>
<P>(<A HREF="misc/adam/keyfiles.sh.txt">Text Version</A>)</P>
<PRE>
#!/bin/bash
#################################################
#Keyfiles - tar/gzip configuration files #
#Version: Version 1.0 (first draft) #
#Ackn: based on an idea from Dave Turnbull #
#Authour: Thomas Adam #
#Date: Monday 28 May 2001, 16:05pm BST #
#Website: www.squidproxyapps.org.uk #
#Contact: thomas@squidproxyapps.org.uk #
#################################################
#Comments herein are for the benefit of Dave Turnbull :-).
#Declare Variables
configfile="/etc/keyfiles.conf"
tmpdir="/tmp"
wrkdir="/var/log/keyfiles"
tarfile=keyfiles-$(date +%d%m%Y).tgz
method=$1 #options passed to "keyfiles"
submethod=$2 #options supplied along with "$1"
quiet=0 #Turns on verbosity (default)
cmd=`basename $0` #strip path from filename.
optfiles="Usage: $cmd [--default (--quiet)] [--listconffiles] [--restore (--quiet)] [--editconf] [--delold] [--version]"
version="keyfiles: Created by Thomas Adam, Version 1.0 (Tuesday 5 June 2001, 23:42)"
#handle error checking...
if [ ! -e $configfile ]; then
for beepthatbell in 1 2 3 4 5; do
echo -en "\x07"
mail -s "[Keyfiles]: $configfile not found" $USER
done
fi
#Make sure we have a working directory
[ ! -d $wrkdir ] && mkdir $wrkdir
#Parse options sent via command-line
if [ -z $method ]; then
echo $optfiles
exit 0
fi
#Check command line syntax
check_syntax ()
{
case $method in
--default)
cmd_default
;;
--listconffiles)
cmd_listconffiles
;;
--restore)
shift 1
cmd_restore
;;
--editconf)
exec $EDITOR $configfile
exit 0
;;
--delold)
cd $wrkdir && rm -f ./*.old > /dev/null
exit 0
;;
--version)
echo $version
exit 0
;;
--*|-*|*)
echo $optfiles
exit 0
;;
esac
}
#Now the work begins.....
#declare function to use "--default" settings
cmd_default ()
{
#tar/gz all files contained within $configfile
if [ $submethod ]; then
tar -cZPpsf $tmp/$tarfile $(cat $configfile) &>/dev/null 2>&1
else
tar -vcZPpsf $tmp/$tarfile $(cat $configfile)
fi
#If the contents of the directory is empty......
if test $(ls -1 $wrkdir | grep -c -) = "0"; then
mv $tmp/$tarfile $wrkdir
exit 0
fi
for i in $(ls $wrkdir/*.tgz); do
mv $i $i.old
done
mv $tmp/$tarfile $wrkdir
}
#List files contained within $configfile
cmd_listconffiles ()
{
sort -o $configfile $configfile
cat $configfile
exit 0
}
#Restore files......
cmd_restore ()
{
cp $wrkdir/keyfiles*.tgz /
cd /
#Check for quiet flag :-)
if [ $submethod ]; then
tar vzxfmp keyfiles*.tgz &>/dev/null 2>&1
rm -f /keyfiles*.tgz
exit 0
else
tar vzxfmp keyfiles*.tgz
rm -f /keyfiles*.tgz
exit 0
fi
}
#call the main function
check_syntax
</PRE>
<P ALIGN="center">-------------------</P>
<P>Suffice to say, the main changes that you might have to make, are to the following
variables:</P>
<PRE>
configfile="/etc/keyfiles.conf"
tmpdir="/tmp"
wrkdir="/var/log/keyfiles"
</PRE>
<P>However, my script is sufficiently intelligent, to check for the presence of $wrkdir,
and if it doesn't exist -- create it.</P>
<P>You will also have to make sure that you set the appropriate permissions, thus:</P>
<PRE>
chmod 700 /usr/local/bin/keyfiles
</PRE>
<P>The most important file, is the script's configuration file, which, for me, looks like
the following:</P>
<P ALIGN="center">-------------------</P>
<P>(<A HREF="misc/adam/keyfiles.conf.txt">Text Version</A>)</P>
<PRE>
/etc/keyfiles.conf
/etc/rc.config
/home/*/.AnotherLevel/*
/home/*/.fvwm2rc.m4
/home/solent/ada/*
/root/.AnotherLevel/*
/root/.fvwm2rc.m4
/usr/bin/header.sed
/usr/bin/loop4mail
/var/spool/mail/*
</PRE>
<P ALIGN="center">-------------------</P>
<P>Since this file, is passed to the main <B>tar</B> program, then the use of wildcards is
valid, as in the above file.</P>
<P>It should be pointed out that each time the script runs, the last backup file created, i.e "keyfiles-DATE.tgz" is renamed to "keyfiles-DATE.tgz.old" before the new file
takes its place.</P>
<P>This is so that if you need to restore the backup file at anytime, my script knows which file
to use by checking for a ".tgz" extension.</P>
<P>Because of this feature, I have also included a "--delold" option which deletes all the
old backup files from the directory.</P>
<P>To use the program, type:</P>
<PRE>
keyfiles --default
</PRE>
<P>Which will start the backup process. If you want to surpress the verbosity, you can add the flag:
</P>
<PRE>
keyfiles --default --quiet
</PRE>
<P>The other options that this program takes, are pretty much self-explanatory.</P>
<P>This backup script is by no means perfect, and there are better ones available. Any
comments that you have, would be appreciated!!</P>
<!-- ==================== -->
<!-- END: keyfiles -->
<!-- ==================== -->
<HR>
<!-- ======================== -->
<!-- ====================== -->
<!-- BEGIN: keyfiles -->
<!-- ====================== -->
<H2><A NAME="prognedit">Program Review: Nedit</A></H2>
<P>Way, way, back in the days when the illustrious founder of this special magazine, <B>
John Fisk</B> was writing this column, another authour, <B>Larry Ayers</B> used to do a
series of program reviews. He mentioned briefly a new program called <I>Nedit</I>, but
never reviewed it.</P>
<P>So, I will :-)</P>
<P>I have been using Nedit for about three years now. I do all of my work in it -- when I
am in X11 that is. A typical window of Nedit, looks like <A HREF="misc/adam/nedit1.png">
this screenshot</A>.</P>
<P>This program offers a huge selection of features. Probably the most popular is the
syntax highlighting feature, for over a host of languages, many of which are:</P>
<UL>
<LI>C</LI>
<LI>C++</LI>
<LI>Java</LI>
<LI>JavaScript</LI>
<LI>Ada</LI>
<LI>Fortran</LI>
<LI>Pascal</LI>
<LI>Lex</LI>
<LI>Yacc</LI>
<LI>Perl</LI>
<LI>Python</LI>
<LI>Tcl</LI>
<LI>Awk</LI>
<LI>Sh Ksh Bash</LI>
<LI>Csh</LI>
<LI>Makefile</LI>
<LI>SGML HTMK</LI>
<LI>LaTeX</LI>
<LI>Postscript</LI>
<LI>SQL</LI>
<LI>Matlab</LI>
<LI>VHDL</LI>
<LI>Verilog</LI>
<LI>Xresources</LI>
<LI>Nedit Macro</LI>
<LI>CSS</LI>
<LI>Regex</LI>
<LI>XML</LI>
</UL>
<P>If, for some bizare reason, you program in an obscure langauge that is not listed in the
above then you can specify your own regex patterns.</P>
<P>Nedit also allows you to do complex search and replace methods by using case-sensitive
regex pattern matches.</P>
<P>A typical search / replace dialog box, looks like the following:</P>
<IMG SRC=".isc/adam/nedit2.png">
<P>Allowing you to form complex searches.</P>
<P>Each of the menus, can be torn-off and remain sticky windows. This can be particularly
useful, if you a particular menu over and over, and don't want to keep clicking on it
each time.</P>
<P>This program is over-loaded with options, many of which I am sure are useful, but I
have not been able to find a use for all of them yet. And as if that was not enough,
Nedit allows you to write custom macros so that you can define even more weirder
functions.</P>
<P>I recommend this program to <I>everyone</I>, and while I don't want to re-invent the
<B>Emacs / Vim</B> argument, I really would consider it a viable alternative to the
over-bloated "X11-Emacs" package that eats up far too much memory!! :-) </P>
<P>You can get Nedit from the following:</P>
<A HREF="http://www.nedit.org" TARGET="_blank">www.nedit.org</A>
<P>Enjoy it :-)</P>
<!-- ==================== -->
<!-- END: nedit -->
<!-- ==================== -->
<HR>
<!-- ======================== -->
<!-- ====================== -->
<!-- BEGIN: closing time -->
<!-- ====================== -->
<H2><A NAME="closet">Closing Time</A></H2>
<P>Well, that concludes it for this month -- I had not expected it to be quite this long!!.
My academic year is more or less at a close, and I have exams coming up at the end of May.
Then I shall be free over the summer to pursue all my Linux ideas that have been
formulating in my brain ( <B>-- that is whats left of it after Ben Okopnik brain washed me)
</B>:-)</P>
<P>Oh well, until next month -- take care.</P>
<!-- ==================== -->
<!-- END: closet -->
<!-- ==================== -->
<HR>
<!-- ** Begin table comments, etc. Oh wakey wakey you idiot Thomas ** -->
<TABLE width="60%" align=center border=0>
<TBODY>
<TR>
<TH></TH>
<TH></TH>
<TH></TH>
<TR>
<TD width="10%"><IMG height=64 alt="" src="../gx/adam/mail.png"
width=64 align=left></TD>
<TD align=middle width="80%"><FONT color=red size=5>Send Your
Comments</FONT></TD>
<TD width="10%"><IMG height=64 alt="" src="../gx/adam/mail.png"
width=64 align=left></TD></TR></TBODY></TABLE>
<P align=center><FONT size=3>Any comments, suggestions, ideas, etc can be mailed
to me by clicking the e-mail address link below:</FONT></P>
<P align=center><FONT size=3><A
href="mailto:thomas_adam16@yahoo.com">mailto:thomas_adam16@yahoo.com</A></FONT></P>
<HR>
<!-- *** BEGIN bio *** -->
<SPACER TYPE="vertical" SIZE="30">
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Thomas Adam</H4>
My name is Thomas Adam. I am 18, and am currently studying for A-Levels
(=university entrance exam). I live
on a small farm, in the county of Dorset in England. I am a massive Linux
enthusiast, and help with linux proxy issues while I am at school. I have been
using Linux now for about six years. When not using Linux, I play the piano,
and enjoy walking and cycling.
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Thomas Adam.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<CENTER>
<H1><FONT COLOR="maroon">Linux User Caricatures</FONT></H1>
<H4>By <A HREF="mailto:falcidi@hotmail.com">Franck Alcidi</A></H4>
</CENTER>
<P> <HR>
<P>Due to popular demand, I created a <A HREF="http://www.slackware.org/">Slackware</A>
geek caricature as well as a Red Flag geek caricature. The Slackware character
comes across to me as being the very cool, confident Linux hacker. If you know
Slackware, bets are you know Linux inside and out ;-)</P>
<P ALIGN="CENTER">
<!-- END header -->
<IMG ALT="[Slackware geek cartoon]" SRC="misc/alcidi/slackware_geek.jpg"
WIDTH="520" HEIGHT="620">
<P ALIGN="CENTER">
<P ALIGN="LEFT">The <A HREF="http://www.redflag-linux.com/eindex.html">Red Flag</A>
geek caricature comes from Asia. Being a Linux distribution developed in China
it was pretty clear cut how this fellow was going to look (well to me anyway).
Lets hope this distribution continues to grow and place a bit of pressure on
MS. I'm sure this particular distro is going to be very popular amongst our
asian buddies.
<P ALIGN="CENTER"><IMG ALT="[Red Flag geek cartoon]" SRC="misc/alcidi/redflag_geek.jpg"
WIDTH="520" HEIGHT="620">
<P> My previous LG cartoons:
<A HREF="../issue72/alcidi.html">issue72</A>
<A HREF="../issue73/alcidi.html">issue73</A>
<A HREF="../issue76/alcidi.html">issue76</A>
<P> <B>Important - </B>You can view my other artwork and sketches on my <B>new</B>
<A HREF="http://www.artsolute.net">website</A>.
<!-- *** BEGIN bio *** -->
<SPACER TYPE="vertical" SIZE="30">
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Franck Alcidi</H4>
<EM> Franck is an artist in Australia. His home page ("Artsolute Linux") is <A HREF="http://www.ozemail.com.au/~geisha/projects.html">http://www.artsolute.net</A>.</EM>
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <HR> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Franck Alcidi.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <I>Linux Gazette</I>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Help Dex</font></H1>
<H4>By <a href="mailto:shane_collinge@yahoo.com">Shane Collinge</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<BLOCKQUOTE><EM>
[These cartoons are scaled down to fit into LG.
To see a panel in all its clarity, click on it. -Editor (Iron).]
</EM></BLOCKQUOTE>
<P>
<A HREF="misc/collinge/hd-flashingled5.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-flashingled5.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/collinge/hd-flashingled6.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-flashingled6.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/collinge/hd-flashingled7.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-flashingled7.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/collinge/hd-reaction.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-reaction.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/collinge/hd-hup.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-hup.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<P> Cartoonist Shane is taking a long holiday in Asia and staying at youth
hostels (YHAs). Carol and Tux decided to accompany him....
<BR>
<A HREF="misc/collinge/hd-secondthing.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-secondthing.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/collinge/hd-webpoint.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-webpoint.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/collinge/hd-explain.jpg">
<IMG ALT="[cartoon]" SRC="misc/collinge/hd-explain.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<P> Recent HelpDex cartoons are
<A HREF="http://www.core.org.au/modules.php?name=Cartoons">here</A>
at the CORE web site.
<!-- *** BEGIN bio *** -->
<SPACER TYPE="vertical" SIZE="30">
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Shane Collinge</H4>
<EM>Part computer programmer, part cartoonist, part Mars Bar. At night, he runs
around in a pair of colorful tights fighting criminals. During the day... well,
he just runs around. He eats when he's hungry and sleeps when he's sleepy.</EM>
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Shane Collinge.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">A Trip Down Hypermedia Lane</font></H1>
<H4>By <a href="mailto:r_holmes@yahoo.com">Ronnie Holm</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<P>
...turning right on Future Avenue. This article adds some
historical and architectural perspective on the world of
hypermedia and what motivated its pioneers. The idea of hypermedia predates the
World Wide Web by some forty-five years, so this article starts by describing
their work. No one correct definition of the term hypermedia exists, but the
article will supply a couple of possible definitions derived from the ideas of
the pioneers.
<P>
Afterwards, four major steps in the architectural evolution of
actual hypermedia systems are described. When reading that part, keep
in mind how software has generally evolved (away from a centralistic
and toward a more modular design). Not surprisingly, this is also
reflected in the development of hypermedia systems.
<P>
<H2><A NAME="SECTION00001000000000000000">
1940s: Vannevar Bush and the Memex</A>
</H2>
<P>
In the mid-forties the accumulated knowledge of mankind was growing
rapidly. This made it exceedingly difficult for people to store
and retrieve information in an efficient and intuitive manner. Bush
[<A HREF="#bush">1</A>] realized the problem of ``information
overload'' and came up with a visionary solution for storage, organization and
retrieval of information. He devised a mechanical device that would work by
the same principle of associative indexing as the human brain and especially
the human memory. The machine, called the Memex (short for Memory extension),
made Bush a pioneer within a field later to be known as hypertext when dealing
with text, and hypermedia when mixing several kinds of media. Today the terms
hypertext and hypermedia are used interchangeably.
<P> The principle of hypertext is a well known concept in literature. At the
same time as one reads linearly through a text it is often possible to jump to
footnotes, annotations, or references to different materials. Bush imagined
that parts of the text could be touched;
thereby leaving the linear way of reading and be taken directly to the
footnote, the annotation, or to some other material. This way of
reading leans upon a possible definition of hypertext as a paradigm
for managing information [<A
HREF="#conklin">2</A>]. Where physical references can
be difficult, or even impossible, to follow, because the source
referred to is unavailable to the reader, i.e. an article or a book,
with electronic hypertext it becomes possible to gather a corpus of
information and radically change the way a document is read or
accessed. One could take this idea one step further and enable the
reader to add new links between different documents, add comments to
the links, or parts of the document itself.
<P>
It was Bush's vision that the Memex would make all these things, as
well as a couple of others, mechanically possible. Nowadays, of
course, what probably come to ones mind when reading the previous
paragraph is the World Wide Web [<A
HREF="#berners-lee">3</A>] and maybe Bill
Gates' vision in the mid-nineties of ``information at your
fingertips'' [<A
HREF="#gates">4</A>]. The Memex in contrast
would store information on microfilm within the machine, but the
principle remains the same. The documents stored in the Memex were
to be linked together using associative indexing as opposed to
numerical or alphabetical indexing. Using associative indexing,
accessing data would become more intuitive for the user of the
machine. Another definition of the term hypertext could then be
a way of organizing information associatively [<A
HREF="#conklin">2</A>]. Where
associations in the brain become weaker as a function of time and the
number of times the association is used to retrieve information,
associations between documents in the Memex would retain their
strength over time.
<P>
Both previous definitions of the term hypertext are concerned with
navigation or a way of navigating through a corpus of information. The
Memex can thus be thought of as a navigational hypermedia system,
allowing its users to jump between documents adding to the reading
experience. This changed experience could form the basis of yet
another possible definition (or a broader version of the previous one)
of the term hypertext as a non-linear organization of information
[<A
HREF="#conklin">2</A>].
<P>
<H2><A NAME="SECTION00002000000000000000">
1960s: Douglas Engelbart and the NLS</A>
</H2>
<P>
Engelbart read Bush's article in the late-forties, but some fifteen
years had to pass before the technology had reached a sufficient
level of maturity for Engelbart to develop the world's first system
utilizing Bush's concept of hypertext. NLS (oN-Line System) supported
(1) the user in working with ideas, (2) the creation of links between
different documents (in a broad sense), (3)
teleconferencing, (4) text processing, (5) sending and
receiving electronic mail, and finally enabled (6) the user to
configure and program the system. This was something unheard of at that
time. To better and more efficiently make this functionality
available to the user, the system made use of some groundbreaking
technologies for its time.
Among other things Engelbart invented something akin to the
mouse to enable the user to point and click on the screen, and a window
manager to make the user interface appear in a consistent manner. The
hypertext part comprised only a small part of NLS's overall
functionality, whose major focus was on providing a tool for helping a
geographically distributed team to better collaborate. Today, this
kind of software is often referred to as groupware.
<P>
The user interface was revolutionary and far ahead of its time for
computer users at all levels. Previously, most programmers
interacted with computers only indirectly through punch cards and output
from a printer. NLS, as a whole, served as a source of inspiration for
systems to come, and inspired Apple in the development of the
graphical user interface in the early eighties.
<P>
<H2><A NAME="SECTION00003000000000000000">
1960s: Ted Nelson and the Xanadu</A>
</H2>
<P>
Like Engelbart, Nelson was inspired by Bush's early article
[<A HREF="#bush">1</A>]. But, unlike Bush and Engelbart, Nelson
came from a background in philosophy and sociology. In the early sixties, he
envisioned a computer system that would make it possible for writers to work
together writing, comparing, revising, and finally publishing their work
electronically.
<P>
Nelson's Xanadu has never really moved beyond the visionary stage,
although a release of the Xanadu system has been announced on several
occasions. It is hard to define exactly what Xanadu is, as it is not
so much a system in itself, but rather a set of ideas that other
systems may adhere to. The name stems from a poem by British writer
Coleridge, who used the word Xanadu to denote a world [<A
HREF="#coleridge">10</A>]
of literary memory where nothing would be forgotten. And indeed, one
of the ideas behind Xanadu was to create a docuverse: a virtual
universe where most of the human knowledge is present. It was also
Nelson who coined the term ``hypertext'' in the mid-sixties, although
his definition was to be understood in the broad sense covering both
hypertext and hypermedia.
<P>
Another one of Nelson's ideas was a special way of referencing
other documents (or parts of them), such that a change in the
aggregated document would automatically propagate to the composite
document; copying by reference or creating a virtual copy as Nelson
put it. This way an author may charge money in return for providing
and keeping the authors part of the overall document up to date. To
some extend, this idea resembles that of todays deep links, although
this concept has spawned some controversy on the copyright issue, an
area that Nelson's virtual copy mechanism was to prevent in the first
place. Many of the original ideas from the Xanadu project eventually
managed to find their way into the World Wide Web and other hypermedia
systems.
<P>
<H2><A NAME="SECTION00004000000000000000">
Hypermedia architectures</A>
</H2>
<P>
When describing the architecture of different kinds of hypermedia
systems, three components are always present. The components and their
purposes are briefly described below to better express why the
evolution from monolithic to component-based systems have taken
place. Even the earliest hypermedia systems made use of a classic
three-tier model, with the application layer on top taking care of
presenting information to the user. Below this layer is the link
layer, that makes up the model of the system and takes care of
managing structure and data. It is the associations and the
information needed to represent these associations that is termed
structure. Data, on the other hand, refers to the actual content of a
document. Finally, the storage component takes care of storing
information ranging from just the structure to both structure and
content of the documents, depending on the system.
<P>
The development has happened in evolutions where, for each new
generation, some functionality previously part of the core of the
system has been factored out into its own component (Figure
<A HREF="#fig:architectures"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]" SRC="misc/holm/crossref.png"></A>, bounding box represents components that are
part of the core of the hypermedia system). The description of
architectures stems partially from [<A
HREF="#wiil">5</A>].
<P>
<H2><A NAME="SECTION00005000000000000000">
Monolithic systems</A>
</H2>
<P>
The dominant architecture among early systems was the monolithic one
(Figure <A HREF="#fig:architectures"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]" src="misc/holm/crossref.png"></A>, on the left). All three layers were
contained within one logical process, although this division was
invisible to the user. A monolithic system is considered a closed
system in that it neither publishes an application programming
interface (API) or a protocol for describing how structure and data
are to be stored. This made it pretty much impossible for other
systems to communicate and exchange data with the monolithic
system. Even basic functionality, such as editing information stored
in the system was managed by internal applications, only supporting a
few data format. So, before one could work on existing data they had
to be imported. This made it impossible to, say, directly store a
document created in a word processor in the monolithic system. At
least, not before the content of the document had been copied into the
internal editor and saved.
<P>
The file formats supported by the systems were limited to what the
developers found useful. If you were to import the contents of a
document created in a word processor, special formatting (part of the
text made bold, or a change in the choice of font etc.) would be
discarded. This puts the user in a dilemma: If hypertext functionality
was to be fully utilized, it happened on the expense of abandoning
ones powerful and familiar application environment in return for using
internal applications of a hypermedia system. A far from ideal
solution, because designers of hypermedia systems are specialists in
developing hypermedia software, not word processing or other kinds of
software.
<P>
Along with the import problem came a related problem: The system is
limited in the number of data formats it can create associations
between. Both documents, or ends, of the association have to reside
within the system boundary; that is, stored within the monolithic
system. Export of data from the system was also far from
straightforward, because the systems made use of their own internal
format for storage; a format rarely supported by contemporary
hypermedia systems, causing information to be lost during the export
process as well.
<P>
Despite these disadvantages, monolithic systems were widely used in
the eighties. Maybe they owe a part of their success to the fact that
other applications used in that period were not too keen on exchanging
data and communicating with each other neither. Examples of monolithic
hypermedia systems are KMS [<A
HREF="#conklin">2</A>,<A
HREF="#akscyn">6</A>], Intermedia
[<A
HREF="#yankelovich">7</A>], Notecards [<A
HREF="#halasz">8</A>], and to some extend the
Microsoft Winhelp system used to generate Windows help
files. Although, strictly speaking, the Microsoft Winhelp system and a
number of other help systems have a different primary use than
traditional hypermedia systems, they nevertheless make use of
hypermedia functionality.
<P>
<P></P>
<DIV ALIGN="CENTER"><A NAME="fig:architectures"></A><A NAME="32"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure:</STRONG>
The monolithic (left), client/server (middle), and Open
Hypermedia System architecture (right).</CAPTION>
<TR><TD><DIV ALIGN="CENTER">
<!-- MATH
$\includegraphics[width=7cm]{architectures.eps}$
-->
<IMG
WIDTH="315" HEIGHT="129" ALIGN="BOTTOM" BORDER="0"
src="misc/holm/img1.png"
ALT="\includegraphics[width=7cm]{architectures.eps}">
</DIV></TD></TR>
</TABLE>
</DIV><P></P>
<P>
<H2><A NAME="SECTION00006000000000000000">
Client/server systems</A>
</H2>
<P>
The description of monolithic systems revealed a number of
shortcomings. As a solution to some of these problems the user
interface component was moved out of core of the system and into its
own process (Figure <A HREF="#fig:architectures"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]" src="misc/holm/crossref.png"></A>, in the middle. With the
shifted rectangles indicating that a number of applications may now
access the hypermedia system). Client/server hypermedia systems come
in two flavors: The link server system (LSS) with its primary focus on
structure; that is the associations between documents, and the
hyperbase management system (HBMS) focusing on structure as well as
content.
<P>
From a software point of view the client/server based hypermedia
systems are open in the sense that they publish a protocol and an API
for applications to use. If an existing application was to offer
hypermedia functionality to its users, it would have to make use of
these protocols and API's. In the hypermedia world, however, the
definition of openness differs from the general definition. A
hypermedia system that requires the application to make use of a
specific format for specifying <I>both</I> structure and data is
considered a closed system, even if it publishes protocols and
API's. An open system, on the contrary, is one that <I>only</I>
specifies a format for structure. By not imposing a particular format
on the actual content itself, an open system is able to handle a lot
of different data formats and create associations between types of
data created by various applications outside the hypermedia system.
<P>
From the general definition of openness it follows that the HTTP
protocol of the World Wide Web is an open protocol in that it
specifies a number of messages to be exchanged between the client and
the server and the expected responses. However, the structure is
embedded within the HTML document as a number of <TT>href</TT>s and
other tags specifying the structure. The implication of this is that
special applications (browsers) are required for parsing HTML files
looking for <TT>href</TT>s (and other tags). That is why the World
Wide Web is a closed hypermedia system when subjected to the
hypermedia definition of openness, and that is why, in a client/server
system, there can be any number of applications making use of the core
system, with information stored on the server.
<P>
Other systems, on the contrary, does not impose a particular format on
the content of the documents. However, they still require the source
code of the application to be modified to make calls to some API. So,
the client/server based systems from the early nineties solved a
number of problems present in the monolithic systems by not making the
application component an integral part of the hypermedia system. An
example of an LSS based system is Sun's Link Service [<A
HREF="#pearl">9</A>],
while the World Wide Web [<A
HREF="#berners-lee">3</A>] is an exemplification of a
HBMS system, storing documents as part of the system as files in a
file system.
<P>
<H2><A NAME="SECTION00007000000000000000">
Open Hypermedia Systems</A>
</H2>
<P>
The OHS is a further development of the client/server concept, and
therefore OHS's and client/server systems have a lot of features in
common. Where client/server systems could be classified in terms of
LSS and HBMS, an OHS is typically a descendant of one of these. OHS's
are only made up of the link component (Figure
<A HREF="#fig:architectures"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]" src="misc/holm/crossref.png"></A>, on the right), and is therefore often
referred to as middleware in the sense that (1) the component contains
functionality to be used or shared across a range of applications, (2)
it works across different platforms, (3) it may be distributed, and
finally (4) it publishes protocols and API's. An OHS is
distinguishable from a client/server system in that there is no
central storage as storing documents are no longer part of the core of
the system.
<P>
Because data is stored separate from structure it is possible to
support associations between just about any data format, i.e. text,
HTML, and graphics etc. When structure associated with a document is
requested by an application, it is send from the link service to the
application and applied to the data. This way a greater number of
applications can interact with the system, as they no longer have to
make use of a specific protocol for storing data, i.e. HTML on the
World Wide Web. Practically speaking, the structural information may
consist of a number of attribute/value-pairs, where the number of
attributes vary depending on the type of data. For an image,
coordinates may be specified, whereas for textual data an offset may
be sufficient.
<P>
OHS's solved some of the problems introduced by the monolithic and the
client/server systems, but are far from ideal. Every OHS defines its
own protocols and API's, and not all OHS's support the same
functionality. Descendants of LSS systems typically allow only for
associations to be created between already existing documents, while
descendants of HBMS systems, in addition to the LSS feature mentioned
above, may also include content related functionality such as version
and concurrency control. The result is that (1) an application written
with a specific OHS in mind, will not work with another system, (2)
because of the different protocols and API's, stored information
cannot be shared across different systems, (3) because of the lack of
a common standard specifying a minimal protocol or API, every
system implements its own API, making individual systems unable to
communicate with each other. Furthermore, although quite a few other
domains exist, most OHS's are designed with navigational hypermedia in
mind. An example of an OHS descending from LSS is Microcosm
[<A
HREF="#davis">12</A>], while an HBMS descendant is Hyperform [<A
HREF="#wiil2">11</A>].
<P>
<H2><A NAME="SECTION00008000000000000000">
Component Based OHS's</A>
</H2>
<P>
Component Based Open Hypermedia Systems (CB-OHS's) are very similar to
``simple'' open hypermedia systems. However, as the name implies,
there is a greater focus on the notion of components. Besides the
component issue, the thing to note here is that this kind of system
supports several kinds of structural domains, and may store its data
at different locations. So, it differs primarily from the OHS in the
link component.
<P>
Compared to the OHS's, the first generation CB-OHS's (1G CB-OHS) tried
to solve the problem of lack of cooperation between individual
components by introducing standards. So far there is an agreed upon
standard specifying how the application and the structure service in
the navigational domain should communicate, and further standards are
underway. Another goal of the 1G CB-OHS is that it should be possible
to extend the system to support other domains as well, simply by
adding a new structure service (that is, a new component) to support
the new domain, i.e. the taxonomic or the spatial
domains. Alternatively an existing component could be modified to
handle several domains as was the case with the OHS. Compared to the
CB-OHS, an OHS can be though of as comprised of just one structure
service. However, modifying an existing component this way is not a
very clean and flexible solution. But common to all structure
components is that they access the storage component through the same
API. The implication of this is that a new structure service will
therefore automatically ``inherit'' mechanisms for versioning,
concurrency control or what else the storage component has to offer.
<P>
For the 1G systems to meet these goals the structure service makes a
number of protocols and API's available to its clients (the browser or
whatever application that wish to communication with the hypermedia
system. Because the system adheres to the hypermedia definition of
openness it can essentially be any type of application). Figure
<A HREF="#fig:architectures2"><IMG ALIGN="BOTTOM" BORDER="1" ALT="[*]" src="misc/holm/crossref.png"></A> shows an architecture with three structural
components, each representing a structural domain. Among other things
a structural domain deals with the special abstractions used,
i.e. node, link, and context within the navigational domain. As
described in the previous section, the special abstractions within
every domain makes it a good candidate for a new component instead of
intermixing the functionality with an existing one.
<P>
<P></P>
<DIV ALIGN="CENTER"><A NAME="fig:architectures2"></A><A NAME="53"></A>
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure:</STRONG>
A CB-OHS architecture</CAPTION>
<TR><TD><DIV ALIGN="CENTER">
<!-- MATH
$\includegraphics[width=7cm]{architectures2.eps}$
-->
<IMG
WIDTH="317" HEIGHT="142" ALIGN="BOTTOM" BORDER="0"
src="misc/holm/img2.png"
ALT="\includegraphics[width=7cm]{architectures2.eps}">
</DIV></TD></TR>
</TABLE>
</DIV><P></P>
<P>
The structure component communicates with the storage component
(called the hypermedia store), but because the components no longer
exist within a single process boundary some additional work has to go
into the communication process. Local communication can be handled by
some form of Interprocess Communication (IPC) or Local Procedure Call
(LPC), but across a network things get complicated. To support network
communication a lot of work went into the development of custom
component frameworks. This is also the main difference between the
first and the second generation of CB-OHS's. Where the 1G CB-OHS made
use of custom frameworks, the 2G CB-OHS makes use of general
frameworks like COM or CORBA. The developer can then focus on
developing hypermedia functionality and ignore the lower level details
of the communication process. The problem with integrating existing
application still exist though, because modifying an existing
application to make use a component framework is generally a
non-trivial task.
<P>
The definition of standards, such as the one between the structure
component and the application, is a result of the work of the Open
Hypermedia Systems Working Group (OHSWG). As standards evolve they
will benefit users at all levels [<A
HREF="#reich">13</A>]. The end user will come
to think of hypermedia functionality in the same way as with cut,
copy, and paste today [<A
HREF="#davis">12</A>]; as something that is a natural
ingredient of every application. At some point in the future it
might be possible to add menu items such as ``Start link'' and
``Finish link'' etc. to every application, and implementing them will
be no more difficult than todays cut, copy, and paste. For producers
of content, common standards will also come in handy, as documents and
structures may be reused across platforms and hypermedia system
boundaries. Finally, besides the editing functionality previously
described, the developer will be able to focus on what a standardized
system offers, no matter of the actual system, as long as it adheres
to agreed upon standards.
<P>
<H2><A NAME="SECTION00009000000000000000">
Summary</A>
</H2>
<P>
Hypermedia systems have emerged from a need for organizing an ever
growing pile of information better than by simply storing things
alphabetically. Since Bush described his thoughts of a machine that
functionally resembled the way the human memory works, the knowledge
of mankind has doubled many times, and the World Wide Web has replaced
many of the earlier hypermedia systems and made quite a bit of the
visions of the pioneers come true. However, at the same time, it is
worth noting that the World Wide Web is a very simple system compared
to earlier as well as contemporary systems. But this simplicity itself
might very well be the main reason behind its success in delivering
hypermedia functionality to the general public.
<P>
The architecture has undergone a gradual development much like the
architecture of any other software. The monolithic systems were not
too keen on acknowledging the existence of other systems. Since then,
things have changed radically, and the systems of today are designed
to import and export data from and to a variety of formats. The common
denominator for import and export is often W3C standards such as SGML
or derivatives like XML or HTML. Add to this the ability of systems to
better allow reuse of functionality across different systems.
<P>
It is also worth noting that HTML, the basic data format of the World
Wide Web, the dominant hypermedia system in use today, keeps structure
and data together and therefore the World Wide Web is not considered
open in the hypermedia sense. Several (successful) attempts have been
made to make the World Wide Web a (component based) open hypermedia
system. All in all the area of hypermedia is a very large area of
ongoing research and there is a lot of elaborating material available
on the systems and the concepts briefly touched upon in this article.
<P>
Copyright (C) 2002 Ronnie Holm. Please email me and let me know where
this article is being used. Verbatim copying and redistribution of
this entire article is permitted in any medium if this notice is
preserved.
<P>
<H2><A NAME="SECTION000010000000000000000">
Bibliography</A>
</H2><DL COMPACT><DD>
<P>
<P></P><DT><A NAME="bush">1</A>
<DD> Vannevar Bush,
<I>As we may think</I>,
<TT>http://www.ps.uni-sb.de/~duchier/
<BR>pub/vbush/vbush.shtml</TT>
<P>
<P></P><DT><A NAME="conklin">2</A>
<DD> Jeff Conklin,
<I>Hypertext: An introduction and survey</I>
<P>
<P></P><DT><A NAME="berners-lee">3</A>
<DD> Tim Berners-Lee et al.,
<I>The World Wide Web</I>
<P>
<P></P><DT><A NAME="gates">4</A>
<DD> Bill Gates,
<I>The Road Ahead</I>
<P>
<P></P><DT><A NAME="wiil">5</A>
<DD> Uffe Kock Wiil et al.,
<I>Evolving hypermedia
middleware services: lessons and observations</I>,
<TT>http://www.cs.aue.auc.dk/~kock/
<BR>Publications/Construct/sac99.pdf</TT>
<P>
<P></P><DT><A NAME="akscyn">6</A>
<DD> Robert Akscyn et al.,
<I>KMS: A distributed
hypermedia system for managing knowledge in organisations</I>
<P>
<P></P><DT><A NAME="yankelovich">7</A>
<DD> Nicole Yankelovich et al.,
<I>Intermedia: The
concept and the construction of a seamless information environment</I>
<P>
<P></P><DT><A NAME="halasz">8</A>
<DD> Frank Halasz et al.,
<I>Reflections on Notecards:
Seven issues for the next generation of hypermedia systems</I>
<P>
<P></P><DT><A NAME="pearl">9</A>
<DD> Amy Pearl,
<I>Sun's link service: A protocol for
open linking</I>
<P>
<P></P><DT><A NAME="coleridge">10</A>
<DD> Samuel Taylor Coleridge,
<I>Kubla Kahn</I>
<TT>http://www.geocities.com/chadlupkes/
<BR>poetry/xanadu.html</TT>
<P>
<P></P><DT><A NAME="wiil2">11</A>
<DD> Uffe Kock Will et al.,
<I>Hyperform: Using extensibility to develop dynamic, open and
distributed hypermedia systems</I>,
<TT>http://www.cs.aue.auc.dk/~kock/
<BR>Publications/Hyperform/echt92.pdf</TT>
<P>
<P></P><DT><A NAME="davis">12</A>
<DD> Hugh Davis et al.,
<I>Light Hypermedia Link Services: A study of third party
application integration</I>
<P>
<P></P><DT><A NAME="reich">13</A>
<DD> Siegfried Reich et al.,
<I>Addressing interoperability in open hypermedia: The design of
the open hypermedia protocol</I>
<P>
</DL>
<!-- *** BEGIN bio *** -->
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Ronnie Holm.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Rapid application development using PyGTK</font></H1>
<H4>By <a href="mailto:krishnakumar_r@bharatmail.com">Krishnakumar R.</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<EM>In a competitive world, there is a definite edge to developing applications as rapidly as possible. This can be done using PyGTK which combines the robustness of Python and the raw power of GTK. This article is a hands on tutorial on building a scientific calculator using pygtk. </EM>
<HR>
<H2><A NAME="s1">1. What is PyGTK ?</A></H2>
<P>
Well, let me quote from the PyGTK source distribution:
<PRE>
"This archive contains modules that allow you to use gtk in Python
programs. At present, it is a fairly complete set of bindings.
Despite the low version number, this piece of software is quite
useful, and is usable to write moderately complex programs."
- README, pygtk-0.6.4
</PRE>
<H2><A NAME="s2">2. What are we going to do ?</A></H2>
<P>We are going to build a small scientific calculator using pygtk. I will explain each stage, in detail. Going through each step of this process will help one to get acquainted with pygtk. I have also put a link to the complete source code at the end of the article.
<H2><A NAME="s3">3. Packages and Basic knowledge you should have</A></H2>
<P>
<DL>
<DT><B>python</B><DD><P>This package is available with almost every Linux distributions. My explanation would be based on Python 1.5.2 installed on a Linux RedHat 6.2 machine. It would be good if you know how to program in python. Even if you do not know python programming, do not worry ! Just follow the instructions given in the article.
<DT><B>pygtk</B><DD><P>Newer versions of this package is available from :
<OL>
<LI>
<A HREF="ftp://ftp.daa.com.au/pub/james/python">ftp://ftp.daa.com.au/pub/james/python</A></LI>
<LI>
<A HREF="ftp://ftp.gtk.org/pub/gtk/python/">ftp://ftp.gtk.org/pub/gtk/python/</A></LI>
<LI>
<A HREF="ftp://ftp.python.org/pub/contrib/Graphics">ftp://ftp.python.org/pub/contrib/Graphics</A></LI>
</OL>
My explanation would be based on pygtk-0.6.4.
</DL>
<H2><A NAME="s4">4. Let us start</A></H2>
<P>The tutorial has been divided into three stages. The code and the corresponding output are given with each stage.
<H2><A NAME="s5">5. Stage 1 - Building a Window </A></H2>
<P>First we need to create a window. Window is actually a container. The buttons tables etc. would come within this window.
Open a new file <CODE>stage1.py</CODE>, using an editor. Write in the following lines to it :
<P>
<HR>
<PRE>
from gtk import *
win = GtkWindow()
def main():
win.set_usize(300, 350)
win.connect("destroy", mainquit)
win.set_title("Scientific Calculator")
win.show()
mainloop()
main()
</PRE>
<HR>
<P>First line is for importing the methods from the module named gtk. That means we can now use the functions present in the gtk library.
<P>Then we make an object of type GtkWindow and name it as win. After that we set the size of the window. The first argument is the breadth and the second argument is the height. We also set the title of our window. Then we call the method by name show. This method will be present in case of all objects. After setting the parameters of a particular object, we should always call show. Only when we call the show of a particular object does it becomes visible to the user. Remember that although you may create an object logically; until you call show of that object, the object will not be physically visible.
<P>
<P>We connect the signal delete of the window to a function mainquit. The mainquit is an internal function of the gtk by calling which the presently running application can be closed. Do not worry about signals. For now just understand that whenever we delete the window (may be by clicking the cross mark at the window top), the mainquit will be called. That is, when we delete the window, the application is also quit.
<P>mainloop() is also an internal function of the gtk library. When we call the mainloop, the launched application waits in a loop for some event to occur. Here the window appears on the screen and just waits. It is waiting in the 'mainloop', for our actions. Only when we delete the window does the application come out of the loop.
<P>Save the file. Quit the editor and come to the shell prompt. At the prompt type :
<P><CODE>python stage1.py </CODE>
<P>Remember, you should be in Xwindow to view the output.
<P>A screen shot of output is shown below.
<P ALIGN="CENTER">
<IMG SRC="misc/krishnakumar/stage1.png" HEIGHT="420" WIDTH="350" ALT="stage1.png">
</P>
<P>
<BR>
<H2><A NAME="s6">6. Stage 2 - Building the table and buttons</A></H2>
<P>Let us start writing the second file, <CODE>stage2.py</CODE>. Write the following code to file <CODE>stage2.py</CODE>.
<HR>
<PRE>
from gtk import *
rows=9
cols=4
win = GtkWindow()
box = GtkVBox()
table = GtkTable(rows, cols, FALSE)
text = GtkText()
close = GtkButton("close")
button_strings=['hypot(','e',',','clear','log(','log10(','pow(','pi','sinh(','cosh(','tanh(','sqrt(','asin(',
'acos(','atan(','(','sin(','cos(','tan(',')','7','8','9','/','4','5','6','*','1','2','3','-', '0','.','=','+'
]
button = map(lambda i:GtkButton(button_strings[i]), range(rows*cols))
def main():
win.set_usize(300, 350)
win.connect("destroy", mainquit)
win.set_title("Scientific Calculator")
win.add(box)
box.show()
text.set_editable(FALSE)
text.set_usize(300,1)
text.show()
text.insert_defaults(" ")
box.pack_start(text)
table.set_row_spacings(5)
table.set_col_spacings(5)
table.set_border_width(0)
box.pack_start(table)
table.show()
for i in range(rows*cols) :
y,x = divmod(i, cols)
table.attach(button[i], x,x+1, y,y+1)
button[i].show()
close.show()
box.pack_start(close)
win.show()
mainloop()
main()
</PRE>
<HR>
<P>The variables <CODE>rows</CODE> and <CODE>cols</CODE> are used to store the number of rows and columns, of buttons, respectively. Four new objects -- the table, the box, the text box and a button are created. The argument to <CODE>GtkButton</CODE> is the label of the button. So <CODE>close</CODE> is a button with label as "closed".
<P>The array , <CODE>button_strings</CODE> is used to store the label of buttons. The symbols that appear in the keypad of scientific calculator are used here. The variable <CODE>button</CODE> is an array of buttons. The <CODE>map</CODE> function creates rows*cols number of buttons. The label of the button is taken from the array <CODE>button_strings</CODE>. So the <CODE>i</CODE>the button will have the <CODE>i</CODE>th string from <CODE>button_strings</CODE> as label. The range of <CODE>i</CODE> is from 0 to rows*cols-1.
<P>We insert a box into the window. To this box we insert the table. And in to this table we insert the buttons.
Corresponding <CODE>show</CODE> of window, table and buttons are called after they are logically created. With <CODE>win.add</CODE> we add the box to the window.
<P>Use of <CODE>text.set_editable(FALSE)</CODE> will set the text box as non-editable. That means we cannot externally add anything to the text box, by typing. The <CODE>text.set_usize</CODE>, sets the size of the text box and the <CODE>text.insert_defaults</CODE> inserts the null string as the default string to the text box. This text box is packed into the starting of the <CODE>box</CODE>.
<P>After the text box we insert the table in to the box. Setting the attributes of the table is trivial. The for loop inserts 4 buttons into 9 rows. The statement <CODE>y,x = divmod(i, cols)</CODE> would divides the value of i by cols and, keeps the quotient in y and the remainder in x.
<P>Finally we insert the close button to the box. Remember, <CODE>pack_start</CODE> would insert the object to the next free space available within the box.
<P>Save the file and type
<P>
<CODE> python stage2.py </CODE>
<P>A screen shot of the output is given below.
<P ALIGN="CENTER">
<IMG SRC="misc/krishnakumar/stage2.png" HEIGHT="420" WIDTH="350" ALT="stage2.png">
</P>
<P>
<BR>
<H2><A NAME="s7">7. Stage 3 - Building the backend for the calculator</A></H2>
<P>Some functions are to be written to make the application do the work of calculator. This functions have been termed as the backend. These are the lines that are to be typed in to <CODE>scical.py</CODE>. This is the final stage. The <CODE>scical.py</CODE> contains the finished output. The program is given below :
<P>
<HR>
<PRE>
from gtk import *
from math import *
toeval=' '
rows=9
cols=4
win = GtkWindow()
box = GtkVBox()
table = GtkTable(rows, cols, FALSE)
text = GtkText()
close = GtkButton("close")
button_strings=['hypot(','e',',','clear','log(','log10(','pow(','pi','sinh(','cosh(','tanh(','sqrt(','asin(','acos(','atan(','(','sin(','cos(','tan(',')','7','8','9','/','4','5','6','*','1','2','3','-', '0','.','=','+']
button = map(lambda i:GtkButton(button_strings[i]), range(rows*cols))
def myeval(*args):
global toeval
try :
b=str(eval(toeval))
except:
b= "error"
toeval=''
else : toeval=b
text.backward_delete(text.get_point())
text.insert_defaults(b)
def mydel(*args):
global toeval
text.backward_delete(text.get_point())
toeval=''
def calcclose(*args):
global toeval
myeval()
win.destroy()
def print_string(args,i):
global toeval
text.backward_delete(text.get_point())
text.backward_delete(len(toeval))
toeval=toeval+button_strings[i]
text.insert_defaults(toeval)
def main():
win.set_usize(300, 350)
win.connect("destroy", mainquit)
win.set_title("Scientific Calculator: scical (C) 2002 Krishnakumar.R, Share Under GPL.")
win.add(box)
box.show()
text.set_editable(FALSE)
text.set_usize(300,1)
text.show()
text.insert_defaults(" ")
box.pack_start(text)
table.set_row_spacings(5)
table.set_col_spacings(5)
table.set_border_width(0)
box.pack_start(table)
table.show()
for i in range(rows*cols) :
if i==(rows*cols-2) : button[i].connect("clicked",myeval)
elif (i==(cols-1)) : button[i].connect("clicked",mydel)
else : button[i].connect("clicked",print_string,i)
y,x = divmod(i, 4)
table.attach(button[i], x,x+1, y,y+1)
button[i].show()
close.show()
close.connect("clicked",calcclose)
box.pack_start(close)
win.show()
mainloop()
main()
</PRE>
<HR>
<P>A new variable <CODE>toeval</CODE> has been included. This variable stores the string that is to be evaluated. The string to be evaluated is present in the text box, at the top. This string is evaluated when the <CODE>=<CODE> button is pressed. This is done by calling the function <CODE>myeval</CODE>. The string contents are evaluated, using python function <CODE>eval</CODE> and the result is printed in the text box. If the string cannot be evaluated (due to some syntax errors), then a string 'error' is printed. We use the try and except for this process.
<P>Pressing any button (using a mouse) other than the <CODE>clear</CODE>, the <CODE>close</CODE> and the <CODE>=</CODE>, will trigger the function <CODE>print_string</CODE>. This function first clears the text box. Now it appends the string corresponding to the button pressed, to the variable <CODE>toeval</CODE> and then displays <CODE>toeval</CODE> in the text box.
<P>If we press the <CODE>close</CODE> button then, the function <CODE>calcclose</CODE> is called, which destroys the window. If we press the <CODE>clear</CODE> button then the function <CODE>mydel</CODE> is called and the text box is cleared. In the function main, we have added the 3 new statements to the for loop. They are for assigning the corresponding functions to the buttons. Thus the <CODE>=</CODE> button is attached to <CODE>myeval</CODE> function, the <CODE>clear</CODE> is attached to <CODE>mydel</CODE> and so on.
<P>Thus we have the complete scientific calculator ready. Just type
<CODE> python scical.py</CODE>
at the shell prompt and you have the scientific calculator running.
<P>A snapshot of final application is given below.
<P>
<P ALIGN="CENTER">
<IMG SRC="misc/krishnakumar/scical.png" HEIGHT="420" WIDTH="350" ALT="scical.png">
</P>
<P>
<BR>
<H2><A NAME="s8">8. Conclusion</A></H2>
<P>The source code of the stages can be downloaded by clicking at the links below.
<P>
<OL>
<LI>
<A HREF="misc/krishnakumar/stage1.py.txt">stage1.py</A></LI>
<LI>
<A HREF="misc/krishnakumar/stage2.py.txt">stage2.py</A></LI>
<LI>
<A HREF="misc/krishnakumar/scical.py.txt">scical.py</A></LI>
</OL>
<P>
<P>They have all .txt extension. Remove this extension and run the programs. For example change stage1.py.txt to stage1.py before executing.
<P>Lot of example programs will be given in the examples directory, which come along with the pygtk package. In Linux, RehHat 6.2 you can find it under /usr/doc/pygtk-0.6.4/examples/ directory. Run those programs and read their source code. This will give you ample help on developing complex applications.
<P>Happy Programming. Good Bye !
<!-- *** BEGIN bio *** -->
<SPACER TYPE="vertical" SIZE="30">
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Krishnakumar R.</H4>
<EM>Krishnakumar is a final year B.Tech student at Govt. Engg. College Thrissur,
Kerala, India. His journey into the land of Operating systems started with
module programming in linux . He has built a routing operating system by name
GROS.(Details available at his home page:
<A HREF="http://www.askus.way.to">www.askus.way.to</A> ) His other
interests include Networking, Device drivers, Compiler Porting and Embedded systems.</EM>
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Krishnakumar R..<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Qubism</font></H1>
<H4>By <a href="mailto:sirflakey@core.org.au">Jon "Sir Flakey" Harsem</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<BLOCKQUOTE><EM>
[These cartoons are scaled down to fit into LG.
To see a panel in all its clarity, click on it. -Editor (Iron).]
</EM></BLOCKQUOTE>
<P>
<A HREF="misc/qubism/qb-easypickings.jpg">
<IMG ALT="[cartoon]" SRC="misc/qubism/qb-easypickings.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/qubism/qb-jarjarce.jpg">
<IMG ALT="[cartoon]" SRC="misc/qubism/qb-jarjarce.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<A HREF="misc/qubism/qb-midichlorians.jpg">
<IMG ALT="[cartoon]" SRC="misc/qubism/qb-midichlorians.jpg"
WIDTH="640" HEIGHT="240"></A>
<BR CLEAR="all">
<P> All Qubism cartoons are
<A HREF="http://www.core.org.au/modules.php?name=Cartoons">here</A>
at the CORE web site.
<!-- *** BEGIN bio *** -->
<SPACER TYPE="vertical" SIZE="30">
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Jon "SirFlakey" Harsem</H4>
<EM>Jon is the creator of the Qubism cartoon strip and current
Editor-in-Chief of the
<A HREF="http://www.core.org.au/">CORE</A> News Site.
Somewhere along the early stages of
his life he picked up a pencil and started drawing on the wallpaper. Now
his cartoons appear 5 days a week on-line, go figure. He confesses to
owning a Mac but swears it is for "personal use".</EM>
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Jon "Sir Flakey" Harsem.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">GUI Programming in C++ using the Qt Library, part 1</font></H1>
<H4>By <a href="mailto:tech@gauravtaneja.com">Gaurav Taneja</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<P>In the vast world of GUI Development Libraries there stands apart
a Library, known as 'Qt' for C++ developed by Trolltech AS. 'Qt' was
commercially introduced in 1996 and since then many of the
sophisticated user interfaces have been developed using this Library
for varied applications.</P>
<P>Qt is cross-platform as it supports <B>MS/Windows,Unix/X11</B>
(Linux, Sun Solaris, HP-UX, Digital Unix, IBM AIX, SGI IRIX and many
other flavors),<B>Macintosh</B> ( Mac OS X ) and <B>Embedded</B>
platforms. Apart from this 'Qt' is object oriented, component based
and has a rich variety of widgets available at the disposal of a
programmer to choose from. 'Qt' is available in its commercial
versions as 'Qt Professional' and 'Qt Enterprise Editions'. The free
Edition is the non-commercial version of Qt and is freely available
for download <SPAN STYLE="text-decoration: none">(</SPAN><A HREF="http://www.trolltech.com/">www.trolltech.com</A><A HREF="http://www.trolltech.com).'Qt/"><SPAN STYLE="text-decoration: none">).</SPAN></A></P>
<H2>Getting Started</H2>
<P STYLE="margin-bottom: 0in">First of all you need to download the
library, i assume that you have downloaded the Qt/X11 version for
Linux as the examples will be taken for the same.</P>
<P STYLE="margin-bottom: 0in">You might require the superuser
privlileges to install, so make sure you are 'root'.</P>
<P STYLE="margin-bottom: 0in">Let's untar it into /usr/local
directory :</P>
<P STYLE="margin-bottom: 0in">[root@Linux local]# tar -zxvf
qt-x11-free-3.0.1</P>
<P STYLE="margin-bottom: 0in">[root@Linux local]# cd
qt-x11-free-3.0.1</P>
<P STYLE="margin-bottom: 0in">Next you will need to compile and
install the library with the options you require to use.'Qt' Library
can be compiled with custom options suiting your needs.We will
compile it so that we get gif reading, threading , STL, remote
control, Xinerama,XftFreeType (anti-aliased font) and X Session
Management support apart from the basic features.</P>
<P STYLE="margin-bottom: 0in">Before we proceed further, remember to
set some environment variables that point to the correct location as
follows:</P>
<P STYLE="margin-bottom: 0in">QTDIR=/usr/local/qt-x11-free-3.0.1<BR>PATH=$QTDIR/bin:$PATH
<BR>MANPATH=$QTDIR/man:$MANPATH
<BR>LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH</P>
<P STYLE="margin-bottom: 0in">export QTDIR PATH MANPATH
LD_LIBRARY_PATH</P>
<P STYLE="margin-bottom: 0in">You can include this information in
your .profile in your home directory.</P>
<P STYLE="margin-bottom: 0in">[root@Linux qt-x11-free-3.0.1]#
./configure -qt-gif -thread -stl -remote -xinerama -xft -sm</P>
<P STYLE="margin-bottom: 0in">[root@Linux qt-x11-free-3.0.1]# make
install</P>
<P STYLE="margin-bottom: 0in">If all goes well, you will have the
'Qt' library installed on your system.</P>
<P STYLE="margin-bottom: 0in"><BR>
</P>
<P STYLE="margin-bottom: 0in"><BR>
</P>
<H2>Your First Steps With 'Qt'
</H2>
<P STYLE="margin-bottom: 0in">In order to start writing programs in
C++ using the 'Qt' library you will need to understand some important
tools and utilities available with 'Qt' Library to ease you job.</P>
<P STYLE="margin-bottom: 0in"><BR>
</P>
<H3>Qmake</H3>
<P>Qmake let's you generate makefiles with the information based on a
'.pro' file.</P>
<P>A simple project file looks something like this:</P>
<PRE> SOURCES = hello.cpp
HEADERS = hello.h
CONFIG += qt warn_on release
TARGET = hello</PRE><P>
Here, 'SOURCES' can be used to define all the implementation source
for the application, if you have more than one source file you can
define them like this:</P>
<P>SOURCES = hello.cpp newone.cpp</P>
<PRE>or alternatively by:
SOURCES += hello.cpp
SOURCES += newone.cpp</PRE><P>
Similarly 'HEADERS' let's you specify the header files belonging to
your source.The 'CONFIG' section facilitates to give qmake info about
the application configuration.This Project file's name should be the
same as the application's executable. Which in our case is
'hello.pro'.</P>
<P>The Makefile can be generated by issuing the command:</P>
<PRE STYLE="margin-bottom: 0.2in">[root@Linux mydirectory]# qmake -o Makefile hello.pro </PRE><H3>
Qt <EM><SPAN STYLE="font-style: normal">Designer</SPAN></EM><SPAN STYLE="font-style: normal">
</SPAN>
</H3>
<P>Qt Designer is a tool that let's you visually design and code user
interfaces using the 'Qt' Library. The WYSIWYG interface comes in
very handy for minutely tweaking the user interface and experimenting
with various widgets.The Designer is capable of generating the entire
source for the GUI at any time for you to enhance further. You will
be reading more about the 'Qt Designer' in the articles that will
follow.</P>
<P>
</P>
<H2>Hello World!</H2>
<P>Let's begin by understanding a basic 'Hello World' Program.Use any
source editor of your choice to write the following code:</P>
<P>#include <qapplication.h> <BR>#include <qpushbutton.h></P>
<P>int main( int argc, char **argv )<BR>{<BR><BR>QApplication a(
argc, argv );<BR>QPushButton hello( "Hello world!", 0
);<BR>hello.resize( 100, 30 );<BR>a.setMainWidget( &hello
);<BR>hello.show();<BR>return a.exec();<BR><BR>}</P>
<P>Save this code as a plain text file('hello.cpp'). Now let's
compile this code by making a project file (.pro) as follows:</P>
<P>TEMPLATE = app<BR>CONFIG += qt warn_on release<BR>HEADERS
=<BR>SOURCES = hello.cpp<BR>TARGET = hello</P>
<P>Let's save this file as 'hello.pro' in the same directory as that
of our source file and continue with the generation of the Makefile.</P>
<PRE STYLE="margin-bottom: 0.2in; font-weight: medium">[root@Linux mydirectory]# qmake -o Makefile hello.pro</PRE><P STYLE="font-weight: medium">
Compile it using 'make'</P>
<PRE STYLE="font-weight: medium">[root@Linux mydirectory]# make
You are now ready to test your first 'Qt' Wonder. Provided you are in 'X', you can launch the<br>program executable.
[root@Linux mydirectory]# ./hello
You should see something like this:
<IMG SRC="misc/taneja/snapshot.png" ALT="Snapshot" ALIGN=LEFT WIDTH=113 HEIGHT=64 BORDER=0>
Let's understand the individual chunks of the code we've written.
The First two lines in our code include the QApplication and QPushButton class definitions.
Always remember that there has to be just one QApplication object in your entire Application.
As with other c++ programs, the main() function is the entry point to your program and
<TT>argc</TT> is the number of command-line arguments while <TT>argv</TT> is the array of command-line arguments.
Next you pass these arguments received by Qt as under:
QApplication a(argc, argv)
Next we create a QPushButton object and initialize it's constructor with two arguments, the
label of the button and it's parent window (0 i.e., in it's own window in this case).
We resize our button with the following code:
hello.resize(100,30);
Qt Applications can optionally have a main widget associated with it.On closure of the main
widget the Application terminates.
We set our main widget as:
a.setMainWidget( &hello );
Next, we set our main widget to be visible. You have to always call show() in order to make
your widget visible.
<SPAN STYLE="font-weight: medium">hello.show();</SPAN>
Next we will finally pass the control to Qt. An important point to be noted here is that exec()
keeps running till the application is alive and returns when the application exits.
</PRE>
<!-- *** BEGIN bio *** -->
<SPACER TYPE="vertical" SIZE="30">
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Gaurav Taneja</H4>
<EM> I work as a Technical Consultant in New Delhi,India in Linux/Java/XML/C++.
I'm Actively involved in open-source projects, with some hosted on
SourceForge. My favorite leisure activities include long drives, tennis,
watching movies and partying. I also run my own software consulting company
named <A HREF="http://www.broadstrike.com">BroadStrike Technologies</A>.</EM>
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Gaurav Taneja.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Xlib Programming in C++</font></H1>
<H4>By <a href="mailto:robt@robtougher.com">Rob Tougher</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<dl>
<dt><a href=#1>1. Introduction</a>
<dt><a href=#2>2. Why not use a widget set?</a>
<dt><a href=#3>3. The basics</a>
<dd><a href=#3.1>3.1 Opening a display</a>
<dd><a href=#3.2>3.2 Creating a window</a>
<dd><a href=#3.3>3.3 Handling events</a>
<dd><a href=#3.4>3.4 Drawing</a>
<dt><a href=#4>4. Advanced - creating a command button from scratch</a>
<dd><a href=#4.1>4.1 Requirements of the button</a>
<dd><a href=#4.2>4.2 Giving it its own window</a>
<dd><a href=#4.3>4.3 Implementing "pressed" and "not pressed" drawn states</a>
<dd><a href=#4.4>4.4 Figuring out which state to draw</a>
<dd><a href=#4.5>4.5 Giving it a "text" property</a>
<dd><a href=#4.6>4.6 Generating an "on_click()" event</a>
<dt><a href=#5>5. Conclusion</a>
<dt><a href=#a>a. References</a>
<dt><a href=#b>b. Files</a>
</dl>
<a name=1></a>
<h2>1. Introduction</h2>
<p>
Xlib is a library that allows you to draw graphics on the screen
of any X server, local or remote, using
the C language. All you need to do is include <X11/Xlib.h>, link
your program using the -lX11 switch, and you are ready to
use any of the functions in the library.
</p>
<p>
For example, say you want to create and show a window on
your local machine. You can write the following:
</p>
Listing 1: <a href="misc/tougher/example1.cpp.txt">example1.cpp</a>
<pre>
#include <X11/Xlib.h>
#include <unistd.h>
main()
{
// Open a display.
Display *d = XOpenDisplay(0);
if ( d )
{
// Create the window
Window w = XCreateWindow(d, DefaultRootWindow(d), 0, 0, 200,
100, 0, CopyFromParent, CopyFromParent,
CopyFromParent, 0, 0);
// Show the window
XMapWindow(d, w);
XFlush(d);
// Sleep long enough to see the window.
sleep(10);
}
return 0;
}
</pre>
<p>
You can compile the program with the following command:
</p>
<pre>
prompt$ g++ test.cpp -L/usr/X11R6/lib -lX11
prompt$ ./a.out
</pre>
<p>
and voil, you have a window on your screen for 10 seconds:
</p>
<img src="misc/tougher/screen_small.png"></img>
<p>
The purpose of this article is to show you some simple classes
that you can use when developing Xlib applications. We will create
an example application that has a window with one button on it.
The button will be a custom button we develop using only
the Xlib library.
</p>
<a name=2></a>
<h2>2. Why not use a widget set?</h2>
<p>
You might be asking yourself "why don't we just use a widget library,
like <a href=http://www.trolltech.com/>QT</a>, or
<a href=http://www.gtk.org/>GTK</a>?".
These are valid questions. I use QT, and find it very
useful when developing C++ applications targeted for the Linux platform.
</p>
<p>
The reason I created these classes was to get a better understanding
of the X Window System. It forced me to figure out exactly what was going
on under the hood in libraries like QT and GTK. Once I had finished,
I realized that the classes I created were actually <i>useful</i>.
</p>
<p>
So hopefully you will find this article educational, and be able to
use the classes presented in your own applications.
</p>
<a name=3></a>
<h2>3. The basics</h2>
<p>
Now let's dive into some code. We'll go over some basic features
of Xlib in this section.
</p>
<a name=3.1></a>
<h3>3.1 Opening a display</h3>
<p>
The first class I created was the
<a href="misc/tougher/display.hpp.txt">display</a> class,
which was in charge of opening and closing a display. You'll
notice that in example1.cpp, we don't close our display properly
with XCloseDisplay(). With this class, it will be closed before
the program exits. Our example now looks like this:
</p>
Listing 2: <a href="misc/tougher/example2.cpp.txt">example2.cpp</a>
<pre>
#include <unistd.h>
<b>#include "xlib++/display.hpp"
using namespace xlib;</b>
main()
{
<b>try
{</b>
// Open a display.
<b>display d("");</b>
// Create the window
Window w = XCreateWindow(<b>(Display*)d</b>,
DefaultRootWindow(<b>(Display*)d</b>),
0, 0, 200, 100, 0, CopyFromParent,
CopyFromParent, CopyFromParent, 0, 0);
// Show the window
XMapWindow(d, w);
XFlush(d);
// Sleep long enough to see the window.
sleep(10);
}
<b>catch ( open_display_exception& e )
{
std::cout << "Exception: " << e.what() << "\n";
}</b>
return 0;
}
</pre>
<p>
Nothing spectacular, really. Just opens and closes a display.
You'll notice in the
<a href="misc/tougher/display.hpp.txt">implementation</a>
that the display class defines the Display* operator, so all
you have to do is cast the object to get the actual
Xlib Display pointer.
</p>
<p>
Also notice the try/catch block. All of the classes in this article
throw custom exceptions to signal error conditions.
</p>
<a name=3.2></a>
<h3>3.2 Creating a window</h3>
<p>
Next I wanted to make window creation easier, so I added a
<a href="misc/tougher/window.hpp.txt">window</a> class to the
mix. This class creates and shows a window in its constructor,
and destroys the window in its destructor. Our example now
looks like this(pay no attention to the event_dispatcher class,
we will go over that next):
</p>
Listing 3 : <a href="misc/tougher/example3.cpp.txt">example3.cpp</a>
<pre>
#include "xlib++/display.hpp"
<b>#include "xlib++/window.hpp"</b>
using namespace xlib;
<b>class main_window : public window
{
public:
main_window ( event_dispatcher& e ) : window ( e ) {};
~main_window(){};
};</b>
main()
{
try
{
// Open a display.
display d("");
<b>event_dispatcher events ( d );
main_window w ( events ); // top-level
events.run();</b>
}
catch ( exception_with_text& e )
{
std::cout << "Exception: " << e.what() << "\n";
}
return 0;
}
</pre>
<p>
Notice that our <b>main_window</b> class inherits from
<b>xlib::window</b>. When we create the main_window object, the
base class' constructor gets called, which creates the
actual Xlib window.
</p>
<a name=3.3></a>
<h3>3.3 Handling events</h3>
<p>
You probably noticed the
<a href="misc/tougher/event_dispatcher.hpp.txt">event_dispatcher</a>
class in the last example. This class takes events off of the
application's queue, and dispatches them to the correct
window.</p>
<p>
This class is defined as the following:
</p>
Listing 4 :
<a href="misc/tougher/event_dispatcher.hpp.txt">event_dispatcher.hpp</a>
<pre>
class event_dispatcher
{
// constructor, destructor, and others...
[snip...]
register_window ( window_base *p );
unregister_window ( window_base *p );
run();
stop();
handle_event ( event );
}
</pre>
<p>
The event_dispatcher passes events to window classes via the
<a href="misc/tougher/window_base.hpp.txt">window_base</a> interface.
All of the classes in this article that represent windows derive
from this class, and are able to catch messages from the dispatcher.
Once they register themselves with the <b>register_window</b>
method, they start receiving messages.
<a href="misc/tougher/window_base.hpp.txt">window_base</a> is
declared as the following, and all classes deriving from it
must define these methods:
</p>
Listing 5 :
<a href="misc/tougher/window_base.hpp.txt">window_base.hpp</a>
<pre>
virtual void on_expose() = 0;
virtual void on_show() = 0;
virtual void on_hide() = 0;
virtual void on_left_button_down ( int x, int y ) = 0;
virtual void on_right_button_down ( int x, int y ) = 0;
virtual void on_left_button_up ( int x, int y ) = 0;
virtual void on_right_button_up ( int x, int y ) = 0;
virtual void on_mouse_enter ( int x, int y ) = 0;
virtual void on_mouse_exit ( int x, int y ) = 0;
virtual void on_mouse_move ( int x, int y ) = 0;
virtual void on_got_focus() = 0;
virtual void on_lost_focus() = 0;
virtual void on_key_press ( character c ) = 0;
virtual void on_key_release ( character c ) = 0;
virtual void on_create() = 0;
virtual void on_destroy() = 0;
</pre>
<p>
Let's see if this actually works. We will try to handle a ButtonPress
event in our window. Add the following code to our main_window
class:
</p>
Listing 6 :
<a href="misc/tougher/example4.cpp.txt">example4.cpp</a>
<pre>
class main_window : public window
{
public:
main_window ( event_dispatcher& e ) : window ( e ) {};
~main_window(){};
<b>void on_left_button_down ( int x, int y )
{
std::cout << "on_left_button_down()\n";
}</b>
};
</pre>
<p>
Compile the code, run the example, and click inside of the
window. It works! The event_dispatcher gets a ButtonPress
message, and sends it to our window via the predefined <b>
on_left_button_down</b> method.
</p>
<a name=3.4></a>
<h3>3.4 Drawing</h3>
<p>
Next let's try to draw in our window. The X Window system defines
the concept of a "graphics context" that you draw into, so I
naturally created a class named <b>graphics_context</b>. The following
is the class' definition:
</p>
Listing 7 :
<a href="misc/tougher/graphics_context.hpp.txt">graphics_context.hpp</a>
<pre>
class graphics_context
{
public:
graphics_context ( display& d, int window_id );
~graphics_context();
void draw_line ( line l );
void draw_rectangle ( rectangle rect );
void draw_text ( point origin, std::string text );
void fill_rectangle ( rectangle rect );
void set_foreground ( color& c );
void set_background ( color& c );
rectangle get_text_rect ( std::string text );
std::vector<int> get_character_widths ( std::string text );
int get_text_height ();
long id();
private:
display& m_display;
int m_window_id;
GC m_gc;
};
</pre>
<p>
You pass this class a window id, and a display object, and
then you can draw as much as you want using the drawing
methods. Let's try it out. Add the following to our example:
</p>
Listing 8 :
<a href="misc/tougher/example5.cpp.txt">example5.cpp</a>
<pre>
#include "xlib++/display.hpp"
#include "xlib++/window.hpp"
<b>#include "xlib++/graphics_context.hpp"</b>
using namespace xlib;
class main_window : public window
{
public:
main_window ( event_dispatcher& e ) : window ( e ) {};
~main_window(){};
<b>void on_expose ()
{
graphics_context gc ( get_display(),
id() );
gc.draw_line ( line ( point(0,0), point(50,50) ) );
gc.draw_text ( point(0, 70), "I'm drawing!!" );
}</b>
};
</pre>
<p>
The <b>on_expose()</b> method is called whenever the window
is displayed, or "exposed". In this method we draw a line and
some text in the window's client area. When you compile and run this
example, you should see something similar to the following:
</p>
<img src="misc/tougher/draw_line.png"></img>
<p>
The <b>graphics_context</b> class is used extensively in the
rest of this article.
</p>
<p>
You may also notice a few helper classes in the above code,
<a href="misc/tougher/shapes.hpp.txt">point and line</a>. These
are small classes I created, all having to do with shapes. They
don't look like they are necessary now, but they will be helpful
later on if I have to perform complex operations with them, like
transformations. For example, it is easier to say "line.move_x(5)",
than to say "line_x += 5; line_y += 5;". It is much cleaner, and
less error-prone.
</p>
<a name=4></a>
<h2>4. Advanced - creating a command button from scratch</h2>
<a name=4.1></a>
<h3>4.1 Requirements of the button</h3>
<p>
Enough of the simple stuff - now let's move on to creating actual
widgets that can be reused. Our focus now will be on
creating a command button that we can use in an application.
The requirements of this button are as follows:
</p>
<ul>
<li>has its own window to receive events
<li>has two drawn states - "pressed", and "not pressed"
<li>draws the "pressed" state when the mouse button was pressed down
when inside the control's rect, and the mouse is <b>still</b> over the control
<li>draws the "not pressed" state when the mouse button is not down,
or when the mouse button is down, and the mouse is outside the rect of
the control
<li>text property with get and set methods
<li>can send an "on_click()" event to the client
</ul>
<p>
This seems like a simple control, but implementing all of this will
be more than trivial. The following sections describe this.
</p>
<a name=4.2></a>
<h3>4.2 Giving it its own window</h3>
<p>
First off, we have to create a separate window for this command
button. The constructor calls the <b>show</b> method, which in turn calls
the <b>create</b> method, which is responsible for window creation:
</p>
Listing 9 :
<a href="misc/tougher/command_button.hpp.txt">command_button.hpp</a>
<pre>
virtual void create()
{
if ( m_window ) return;
m_window = XCreateSimpleWindow ( m_display, m_parent.id(),
m_rect.origin().x(),
m_rect.origin().y(),
m_rect.width(),
m_rect.height(),
0, WhitePixel((void*)m_display,0),
WhitePixel((void*)m_display,0));
if ( m_window == 0 )
{
throw create_button_exception
( "could not create the command button" );
}
m_parent.get_event_dispatcher().register_window ( this );
set_background ( m_background );
}
</pre>
<p>
Looks alot like the <b>window</b> class' constructor, doesn't it?
First it creates the window with the Xlib API XCreateSimpleWindow(),
then it registers itself with the event_dispatcher so it will receive
events, and finally it sets its background.
</p>
<p>
Notice that we pass the parent window's id into the call to
XCreateSimpleWindow(). We are telling Xlib that we want our
command button to be a child window of the parent.
</p>
<a name=4.3></a>
<h3>4.3 Implementing "pressed" and "not pressed" drawn states</h3>
<p>
Because the command button registered itself with the event_dispatcher,
it will receive <b>on_expose()</b> events when it needs to draw
itself. We will use the <b>graphics_context</b> class to draw both
states.
</p>
<p>
The following is the code that will be used for the "not
pressed" state:
</p>
Listing 10 :
<a href="misc/tougher/command_button.hpp.txt">command_button.hpp</a>
<pre>
// bottom
gc.draw_line ( line ( point(0,
rect.height()-1),
point(rect.width()-1,
rect.height()-1) ) );
// right
gc.draw_line ( line ( point ( rect.width()-1,
0 ),
point ( rect.width()-1,
rect.height()-1 ) ) );
gc.set_foreground ( white );
// top
gc.draw_line ( line ( point ( 0,0 ),
point ( rect.width()-2, 0 ) ) );
// left
gc.draw_line ( line ( point ( 0,0 ),
point ( 0, rect.height()-2 ) ) );
gc.set_foreground ( gray );
// bottom
gc.draw_line ( line ( point ( 1, rect.height()-2 ),
point(rect.width()-2,rect.height()-2) ) );
// right
gc.draw_line ( line ( point ( rect.width()-2, 1 ),
point(rect.width()-2,rect.height()-2) ) );
</pre>
<p>
When we finally compile and run this code later on, the button
will look like this:
</p>
<img src="misc/tougher/command_button.png"></img>
<p>
Alternatively, when the button is pressed, the following
code will be used to draw it:
</p>
Listing 11 :
<a href="misc/tougher/command_button.hpp.txt">command_button.hpp</a>
<pre>
gc.set_foreground ( white );
// bottom
gc.draw_line ( line ( point(1,rect.height()-1),
point(rect.width()-1,rect.height()-1) ) );
// right
gc.draw_line ( line ( point ( rect.width()-1, 1 ),
point ( rect.width()-1, rect.height()-1 ) ) );
gc.set_foreground ( black );
// top
gc.draw_line ( line ( point ( 0,0 ),
point ( rect.width()-1, 0 ) ) );
// left
gc.draw_line ( line ( point ( 0,0 ),
point ( 0, rect.height()-1 ) ) );
gc.set_foreground ( gray );
// top
gc.draw_line ( line ( point ( 1, 1 ),
point(rect.width()-2,1) ) );
// left
gc.draw_line ( line ( point ( 1, 1 ),
point( 1, rect.height()-2 ) ) );
</pre>
<p>
And the finished product will appear like the following:
</p>
<img src="misc/tougher/command_button_pressed.png"></img>
<a name=4.4></a>
<h3>4.4 Figuring out which state to draw</h3>
<p>
This seems like a pretty simple task - draw the "pressed" state
when the mouse is down over the control, and draw the "not pressed"
state when the mouse is up. This isn't entirely correct, though.
When you press and hold the left mouse button over our control,
and move the mouse out of the rect, the command button should draw
the "not pressed" state, even though the left mouse button is
currently pressed.
</p>
<p>
The <a href="misc/tougher/command_button.hpp.txt">command_button</a>
class uses two member variables to handle this - <b>m_is_down</b>,
and <b>m_is_mouse_over</b>. Initially, when the mouse is pressed down
over our control(see <b>on_left_button_down()</b>), we put ourselves into
the down state, and refresh the control. This results in the command button
drawing itself pressed. If, at any time, the mouse moves out of the rect
of our control(see <b>on_mouse_exit()</b>), <b>m_is_mouse_over</b>
is set to false, and the control
is refreshed. This results in the command button drawing itself in
the "not pressed" state. If the mouse then moves into the rect of the
control, <b>m_is_mouse_over</b> is toggled back to true, and the control
is drawn pressed. Once the mouse button is released, we set ourselves to
the "not pressed" state, and refresh ourselves.
</p>
<a name=4.5></a>
<h3>4.5 Giving it a "text" property</h3>
<p>
This is a pretty simple task. We basically want the user of this
command button to be able to get and set the text displayed.
Here is the code:
</p>
Listing 12 :
<a href="misc/tougher/command_button.hpp.txt">command_button.hpp</a>
<pre>
std::string get_name() { return m_name; }
void set_name ( std::string s ) { m_name = s; refresh(); }
</pre>
<p>
The <b>refresh()</b> is in there so that the controls redraws itself
with the new text.
</p>
<a name=4.6></a>
<h3>4.6 Generating an "on_click()" event</h3>
<p>
We want the user of this command button to know when we
were clicked. To do this, we will generate an "on_click()"
event. The following is the definition of the
<b>command_button_base</b> class:
</p>
Listing 13 :
<a href="misc/tougher/command_button_base.hpp.txt">command_button_base.hpp</a>
<pre>
namespace xlib
{
class command_button_base : public window_base
{
public:
virtual void on_click () = 0;
};
};
</pre>
<p>
What we are basically saying here is that "we support all events
that a window does, plus one more - on_click()". The user
of this button can derive a new class from it, implement
the <b>on_click()</b> method, and take the appropriate action.
</p>
<a name=5></a>
<h2>5. Conclusion</h2>
<p>
I really hope you enjoyed this article. We went over many
features of Xlib, and wrapped them in C++ classes to
make Xlib development easier in the future. If you have any
questions, comments, or suggestions about this article,
or about Xlib development in general, please feel free
to <a href="mailto:robt@robtougher.com">email me</a>.
<a name=a></a>
<h2>a. References</h2>
<ul>
<li><a href="http://www.xfree86.org/">www.xfree86.org</a>-
home page for XFree86, an open-source implementation of the
X Window System
<li><a href="http://tronche.com/gui/x/xlib/">Xlib Programming Manual</a>-
great resource for information on Xlib development
<li><a href="http://www.x.org/about_x.htm">The X Protocol</a> - information
about the X protocol from www.x.org
</ul>
<a name=b></a>
<h2>b. Files</h2>
<ul>
<li>Examples
<ul>
<li><a href="misc/tougher/Makefile.txt">Makefile</a>
- to compile all of the examples
<li><a href="misc/tougher/example1.cpp.txt">Example1</a>
- creating a simple window with Xlib
<li><a href="misc/tougher/example2.cpp.txt">Example2 </a>
- using the <b>display</b> class
<li><a href="misc/tougher/example3.cpp.txt">Example3 </a>
- using the <b>window</b> class
<li><a href="misc/tougher/example4.cpp.txt">Example4 </a>
- event handling with <b>event_dispatcher</b>
<li><a href="misc/tougher/example5.cpp.txt">Example5 </a>
- drawing lines and text with the <b>graphics_context</b> class
<li><a href="misc/tougher/example6.cpp.txt">Example6 </a>
- our finished command button in action
</ul>
<li>xlib++ classes
<ul>
<li><a href="misc/tougher/pointer.hpp.txt">pointer.hpp</a>
- pointer class
<li><a href="misc/tougher/shapes.hpp.txt">shapes.hpp </a>
- contains various shape classes
<li><a href="misc/tougher/character.hpp.txt">character.hpp,</a>
<a href="misc/tougher/color.hpp.txt">color.hpp</a>
- misc helpers
<li><a href="misc/tougher/command_button_base.hpp.txt">
command_button_base.hpp </a>
- our <b>command_button_base</b> abstract class
<li><a href="misc/tougher/command_button.hpp.txt">command_button.hpp </a>
- our <b>command_button</b> class
<li><a href="misc/tougher/event_dispatcher.hpp.txt">event_dispatcher.hpp</a>
- <b>event_dispatcher</b> class for event handling
<li><a href="misc/tougher/display.hpp.txt">display.hpp</a>
- <b>display</b> class
<li><a href="misc/tougher/exceptions.hpp.txt">exceptions.hpp</a>
- various custom exception classes
<li><a href="misc/tougher/graphics_context.hpp.txt">graphics_context.hpp</a>
- our <b>graphics_context</b> class for drawing
<li><a href="misc/tougher/window_base.hpp.txt">
window_base.hpp </a>
- our <b>window_base</b> abstract class
<li><a href="misc/tougher/window.hpp.txt">window.hpp </a>
- our <b>window</b> class for creating windows
</ul>
<li><a href="misc/tougher/COPYING.txt">COPYING</a>
- Copyright information for the source files in this project
</ul>
</body>
</html>
<!-- *** BEGIN bio *** -->
<SPACER TYPE="vertical" SIZE="30">
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Rob Tougher</H4>
<EM> Rob is a C++ software engineer in the NYC area.
When not coding on his favorite platform, you can
find Rob strolling on the beach with his girlfriend, Nicole,
and their dog, Halley. </EM>
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2002, Rob Tougher.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <hr> <P>
<H1><font color="maroon">The Back Page</font></H1>
<ul>
<li><a HREF="#wacko">Wacko Topic of the Month</a>
<li><a HREF="#nottag">Not The Answer Gang</a>
<li><a HREF="#spam">World of Spam</a>
</ul>
<a name="wacko"></a>
<P> <hr> <P>
<!--====================================================================-->
<center><H3><font color="maroon">Wacko Topic of the Month</font></H3></center>
<P> <HR> <P>
<!--======================================================================-->
<P>
<H3 ALIGN="center"><FONT COLOR="green">Klez.E worm, bad bad dude</FONT></H3>
<p align="right"><FONT COLOR="#000000"><strong>Contributed By Iron
</strong></FONT></p>
Normally, I don't think much about spam. It's easy to spot it in a mail
index. Spam just doesn't have plausable Subject: lines. Too many
capital letters, too many '$' and other symbols, and words that no
person would put in a subject; e.g., "Here's the info you asked about."
<P> Three weeks ago, I started receiving a lot of binary attachments. After
two weeks of seeing the same subject lines over and over, I started keeping
count. 241 messages in 9 days, or 32 MB. Ironically, the culprit itself
revealed its identity. One of the subjects was "W32.Klez.E removal tools". I
headed to
<A HREF="http://www.datafellows.com/">www.datafellows.com</A>, searched for
"Klez.E", and sure enough, it's a worm.
<P>
<A HREF="http://www.europe.f-secure.com/v-descs/klez_e.shtml">http://www.europe.f-secure.com/v-descs/klez_e.shtml</A>
<P> It's quite a complicated little beastie. It has a large pool of
subjects to choose from and also incorporates phrases it finds in files.
It has a built-in SMTP client and sends itself to whoever it finds in your
Outlook address book, pretending to be From: somebody else in your address
book.
<P> Linux users of course can't get infected, although it can leak onto Linux
mailing lists and pretend to be From: a Linux user. But Windows users who
are unlucky enough to run the program or let IE or Outlook automatically
execute it will have their documents overwritten with random data, their
anti-virus programs disabled, and their address book harvested. Often it
pretends to be an audio file, exploiting a bug in some Windows programs
that automatically executes audio attachments.
<P> In the past week, the worm has forged the addresses of both Alex
(former Answer Gang member and column writer) and the Editor Gal (Heather),
and sent three messages to a linux-list recipient claiming to be From:
linux-list. Interestingly, the addresses it chose for Heather and the
linux-list person were obsolete.
<P> I have no idea why the Gazette address has the honor of receiving 99%
of these critters.
<P> What burns me up was not only the bandwidth but the sneaky way it tries
to trick you into running the attachments, claiming to be a Win XP patch
(that's what first got me suspicious) or an anti-virus tool against itself.
Some of its messages include the URLs of real anti-virus companies as a way
to sound legitimate.
<PRE>
A Win XP patch
Your password
A nice game
This is a very nice game<br>
This game is my first work.<br>
I hope you would enjoy it.
A special excite game
If you're not connected to the Internet
W32.Klez.E removal tools
<FONT>Sophos give you the W32.Klez.E removal tools<br>
W32.Klez.E is a dangerous virus that spread through email.<br>
<br>
For more information,please visit http://www.Sophos.com</FONT>
Worm Klex.E immunity
<FONT>Klez.E is the most common world-wide spreading worm.It's very
dangerous by corrupting your files.<br> Because of its very smart
stealth and anti-anti-virus technic,most common AV software can't
detect or clean it.<br> We developed this free immunity tool to defeat
the malicious virus.<br> You only need to run this tool once,and then
Klez will never come into your PC.<br> NOTE: Because this tool acts as
a fake Klez to fool the real worm,some AV monitor maybe cry when you
run it.<br> If so,Ignore the warning,and select 'continue'.<br> If you
have any question,please <a href=3Dmailto:equipment@sascouk.com>mail to
me</a>.</FONT>
W32.Elkern removal tools
W32.Elkern is a dangerous virus that can infect on Win98/Me/2000/XP.
Trendmicro give you the W32.Elkern removal tools
For more information,please visit http://www.Trendmicro.com
Hi,gazette,darling
Introduction on ADSL
False) window.parent.GoNext()
Tooltips.style.visibility
CELLSPACING
Content-Type: audio/x-wav; name=height.bat
So cool a flash,enjoy it
name=Nt324-00.doc
A IE 6.0 patch
name=sidprod1[1].htm
Password. Make sure you remove the cookies by
</PRE>
Cutest subject: "there's a solution". It sounds like a religious evangelist,
but with the vagueness of a fortune cookie.
<P> First non-English subjects: "Impostati", "Bliver brugt i Netscape".
<P> Ben sent in this procmail stanza that catches all messages with
Windows binary attachments and sends them to /dev/null:
<PRE>
# Goodbye to all the fools sending me "executable" attachments
:0B:
* name=.*(\.exe$|\.scr$|\.pif$)
/dev/null
</PRE>
I wrote a recipe that catches the subject lines used by this
worm, with double spaces after the words it uses double spaces after.
It puts the messages in I.worm in my mail directory. ("I." is the
common prefix for my incoming mailboxes.)
<P>
<A HREF="misc/backpage/klezkiller.procmailrc.txt">misc/backpage/klezkiller.procmailrc.txt</A>
<P> To generate the subject lines:
<PRE>
grep -i 'Subject:' spambin | tr A-Z a-z | sed 's/subject: //' | sort -u >victims
</PRE>
<P> I've also started temporarily moderating linux-list, where it also
tried to spread. And I've been collecting these critters in a mailbox
and sending complaints to the postmaster@ and abuse@ the relay ISPs, and
blocking mail from those that don't respond.
<H4>Breen Mullins writes:</H4>
Yeah, we're seeing it. This is one mean little sucker. It has the
usual features of an Outlook-based worm, with the charming addition
that it uses a random address from the victim's address book as the
From: address when it tries to propogate itself.
When you're accused of spreading Windows worms from your linux box,
that's why.
<P>
More from Symantec:
<A HREF="http://www.symantec.com/avcenter/venc/data/w32.klez.h@mm.html">http://www.symantec.com/avcenter/venc/data/w32.klez.h@mm.html</A>
<P>
The colleague who answers the support@ mailbox here reports receiving
282 of these in 5 days.
<H3>Elkern virus</H3>
The worm also drops a virus, Elkern.
<A HREF="http://www.europe.f-secure.com/v-descs/elkern.shtml">http://www.europe.f-secure.com/v-descs/elkern.shtml</A>.
One curious fact:
<BLOCKQUOTE>
Curiously, "the virus doesn't work on any operating system except Windows 98
because of a serious bug in its code. Due to some blind luck the virus also
works on Windows 2000... When the main code gets control, the first thing is
does is calls the IsDebuggerPresent API function. But the virus calls this
function using a fixed API address and this address is only valid for Windows
98. On all other systems the virus just crashes. ... [Stuff about registry
keys it sets] ... On Windows NT this doesn't happen because the virus crashes.
Due to a dumb luck the virus doesn't crash on Windows 2000 though it calls a
non-existing API address. "
</BLOCKQUOTE>
<H3>Didier Heyden writes:</H3>
<P> Trendmicro/<A HREF="http://antivirus.com/">antivirus.com</A>
describes the worm's attack scheme:
<BLOCKQUOTE>
It does not require the email receiver to open the
attachment for it to execute. It uses a known
vulnerability in Internet Explorer-based email clients to
execute the file attachment automatically. This is also
known as Automatic Execution of Embedded MIME type.
<P>
The infected email contains the executable attachment
registered as content-type of audio/x-wav or
sometimes audio/x-midi so that when recipients view
the infected email, the default application associated
with audio files is opened. This is usually the Windows
Media Player. The embedded EXE file cannot be
viewed in Microsoft Outlook."
<P>
However Trendmicro also pretends that the thing (at least the `E'
and `H' variants) composes the message body "randomly"...
The `H' variant is supposed to contain the following strings:
<PRE>
Win32 Klez V2.01 & Win32 Foroux V1.0
Copyright 2002,made in Asia
About Klez V2.01:
1,Main mission is to release the new baby PE virus,Win32
Foroux
2,No significant change.No bug fixed.No any payload.
About Win32 Foroux (plz keep the name,thanx)
1,Full compatible Win32 PE virus on Win9X/2K/NT/XP
2,With very interesting feature.Check it!
3,No any payload.No any optimization
4,Not bug free,because of a hurry work.No more than three
weeks from having such idea to accomplishing coding and
testing"
</PRE>
The sender `from:' address seems to be taken randomly either from the
infected user's address book (which means that the apparent originator
is not necessarily infected her/himself), or from a set of hardcoded
addresses.
</BLOCKQUOTE>
<a name="nottag"></a>
<P> <hr> <P>
<!--====================================================================-->
<center><H3><font color="maroon">Not The Answer Gang</font></H3></center>
<P> <HR> <P>
<!--======================================================================-->
<P>
<H4>Bill Danzon:</H4>
Well I never! I didn't expected such a prompt reply. Don't you have to
tack, jib or shiver your timbers occasionally on that boat of yours?
<H4>Ben Okopnik:</H4>
Nah. These days, it's all done by computer. I just sit back and watch as
the boat crashes into, erm, well, I never did trust them damn machines
anyhow. What were we talking about?
<H4>Bill:</H4>
Early tomorrow I will be leaving home and driving 1000 miles to the Belgium
coast to catch a 14-hour ferry to the north of England and don't know when I'll
be returning. Pure coincidence, I assure you. No. Really. It has nothing
whatsover to do with being threatened by "dustbunnies", whatever they are.
<BLOCKQUOTE>
<H4>Iron:</H4>
Better go to Scotland. If it's cold enough that tomatoes don't grow up
there, maybe you're safe from dust bunnies too.
Dust bunnies are those clumps of dust that accumulate behind and
underneath furniture. Sounds like there might be a dust bunny
convention under your sofa.
</BLOCKQUOTE>
<H4>Thomas Adam:</H4>
On behalf of the English people who are resident at
TAG (including myself) -- welcome to England, Bill.
<H4>Ben:</H4>
Yikes. I didn't know that there _was_ a 1000 mile stretch you could drive
in Europe...
<P>
I'm just kidding, of course. I mean, at least there the Le Mans... That's a
strange highway, though; after a while, the faces in the crowds along the side
of the road (and *boy* are they big crowds - you'd think they've never seen
a car before!) begin to look _really_ familiar, like they were *repeating*
or something. And there's no place to pull over and buy a hot dog, either.
<H4>Thomas:</H4>
That would be too "American" -- :-) Indeed, there is
always a nice little tea room, where one can get their
"tea and scones"!! :-)
<H4>Ben:</H4>
*And* when I got off it, it looked like the same town I started in! What a
bore. I'm never going back there again.
<H4>Thomas:</H4>
Lol, how so, Ben?? You mean you got fed up of the
thatched roofs...but I thought you Americans liked all
the picturesque scenary? -- No?? You did watch
"Inspector Morse"??
<H4>Ben:</H4>
Oh, and if you're going to England, be careful: there's supposed to be this
fella there named Thomas Adam, and he...
Oh, - *hi*, Thomas! So nice to see you! I was just telling Bill here what a
great country you have, with flush toilets and payphones, even... I've
already arranged the low, low down payment and a great interest rate, and
he sounds interested. <grin>
<H4>Thomas:</H4>
What? didn't your Mum (oh....sorry "mom") teach you
where the pull-chain was?? :-)
<H4>Ben:</H4>
Nah; I was too busy learning to spell "tire", "maneuver", and "apothegm"
the right way. :) I figured out pull-chains on my own.
<H4>Thomas:</H4>
Easy Ben. Hows the sunglasses, incidentally??
<H4>Ben:</H4>
Still dark and menacing as ever, thanks.
<H4>Thomas:</H4>
--Mr. Thomas Adam (English, by the way!!)
<H4>Ben:</H4>
<blink, blink> Really? There I was, thinking that the county of Dorset was
on Mars. Silly me...
<HR WIDTH="80%"> <!--*********************** -->
<H3 ALIGN="center"><FONT COLOR="green">Sendmail for kids</FONT></H3>
<STRONG>
I'm not old enough to use Linux yet .
But I'm trying to configure the
Linux ( send mail) to work as mail relay and I couldn't. where can I find
clear documentation for configuring the Linux to work as Mail relay ??
<P>
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
</STRONG>
<P>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Iron]
<P>
I didn't know there was a minimum age to use Linux. If you're old enough
to write an e-mail, you're old enough to write Linux.
<P>
Are you old enough to set your mailer so it sends us only text-format
messages, not HTML format? Text messages are easier for us to read and
respond to, and are the standard for Internet e-mail.
<P>
You're not old enough to use Linux and you're trying to configure Sendmail???
Mamma mia! Why? Use a mail transfer agent like Postfix that's much easier
to configure than Sendmail.
<P>
What exactly do you want to do, what have you tried, and what are the
problems?
<P>
I assume by "mail relay" you just mean you want Sendmail to work, so you can
send mail from and to your computer. That's not a mail relay. A "mail relay"
means that your Sendmail program accepts mail *from non-local senders to
non-local recipients*. Normally, Sendmail accepts mail only if it's *from a
local user* or *to a local user*. Otherwise, you open up your mail server for
exploitation by spammers.
<P>
If this is the central mail server for an organization, it probably accepts
mail from computers in the organization but not from other computers.
This is technically "relaying", but with most mail transfer agents you don't
configure it as a relay, instead you tell the program these are local addresses.
<P>
If you're trying to be a spammer yourself, see Linux Gazette's advice for
crackers:
<A HREF="http://www.linuxgazette.com/issue76/lg_backpage.html#nottag">#1</A>
<A HREF="http://www.linuxgazette.com/issue73/lg_backpage.html#wacko">#2</A>
<HR WIDTH="40%" ALIGN="center"> <!-- ****************************** -->
<H4>Ben:</H4>
Unfortunately, when I tried to notify Faber, his mail server said
<choke><gag><puke>
<P>
So, I'm putting it up here. Some of you might care, others hit 'delete' -
and Faber, presumably, will get a high-speed cartoon brick with a message
wrapped around it, telling him to smack his server so that it will take my
messages and _like_ it.
<P>
<making faces at Faber's server> Nyah. :)
<HR WIDTH="40%" ALIGN="center"> <!-- ****************************** -->
<H4>Iron:</H4>
Anybody want to take a crack at this? It's an *.exe attachment supposedly
sent by Microsoft to all its customers, a security upgrade for IE and
Outlook/Express.
<H4>Ben:</H4>
Ah yes; another sleaze trying a bit of social engineering. Let's see...
<BLOCKQUOTE><PRE>
----- Forwarded message from Microsoft Corporation Security Center
<rdquest12@microsoft.com> -----
Date: Sun, 17 Mar 2002 20:35:29 -0600
From: "Microsoft Corporation Security Center" <rdquest12@microsoft.com>
To: "Microsoft Customer" <'customer@yourdomain.com'>
Subject: Internet Security Update
</PRE></BLOCKQUOTE>
Yeah, *right*. Micros*ft may produce a broken OS, be in league with the
Dark Forces, and smell of elderberries, but they're *not* stupid enough to
spam millions of people. Sorry, slimeball; try elsewhere.
<BLOCKQUOTE><PRE>
Microsoft Customer,
this is the latest version of security update, the
known security vulnerabilities affecting Internet Explorer and
MS Outlook/Express as well as six new vulnerabilities, and is
discussed in Microsoft Security Bulletin MS02-005. Install now to
protect your computer from these vulnerabilities, the most serious of which
could allow an attacker to run code on your computer.
</PRE></BLOCKQUOTE>
First off, the poor English should trigger off warnings; you don't "protect
from" vulnerabilities; dependent clauses need a referent; and "security
update" takes a definite article. An articulate seven-year old, or an
under-educated teenager? Take your pick.
<P>
"Don't delay! Grab the patch from *THIS* Micros*ft site RIGHT NOW!!!"
<P>
http://www.microsoft.com\no+really:this_is=the+real+thing@666_666
<H4>Heather:</H4>
[Dear Microsoft Customer: pleez run this attachment to induce^H protext from
evildoer accezz]
<P>
Yeah, this whole thing sparked me to mantion a "warning in case you have
gullible end users" to my local sysadmins list.
<BLOCKQUOTE>
NEWS FLASH
<P>
Reports of a new strain of the "lack of clue" virus, in which people
who lack a clue when dealing with email attachments are victimized
easily, is going around.
<P>
This one affects all clueless Microsoft customers and is invoked when
the hapless victim opens an attachment claiming to be "from Microsoft"
(CLUE: Microsoft never sends attachments. They have a website and a
rather annoying auto-update system. They don't need to waste their
own email bandwidth spamming customers with update .exe packets).
<P>
Linux users are largely immune, as are freeBSD users, but users of
MSwin based mailers which "helpfully" open attachments for them are
heavy sufferers in this ailment. Linux and BSD folk who use WINE
or DOSEMU and have made any special effort to autolaunch those sort
of binaries should beware though. ("Too much clue" is also a problem
at times...)
<P>
Sites using a central SMTP gateway can apply filters against undesired
attachments. If you don't have a clue what policy to apply, consider
dumping all mail bearing attachments with the "Known Dangerous
Extensions" - a Microsoft Knowledge Base document available on their
website - into some moderated account which is maintained by a user
with no interesting privileges, or to pass it through some antivirus
scanning.
</BLOCKQUOTE>
<HR WIDTH="40%" ALIGN="center"> <!-- ****************************** -->
<STRONG>
Subject: Precious Cat News<BR>
Quality Scoopable Litter Solutions
</STRONG>
<H4>Iron:</H4>
Anyone want to take a shot at this? Lampooning for the Back Page open
for business now. Notice question 2, "Why won't my cat use the litter
box?" and "Quality scoopable litter solutions".
<H4>Heather:</H4>
for a proper firewall, we recommend you load the ip-cardboard module,
although ip-plastic-with-lid has also been found effective. The
selfscoop module may not be compatible with your cat if she hates the
disk noises while it updates the logs...
<H4>Ben:</H4>
*There's* the problem, right there. You should be loading the "catp-*"
versions of those modules, instead; the "ip-*" subset is intended for those
humans who are silly enough to want to _demonstrate_ for their fussy fuzzy
furball.
<H4>Heather:</H4>
Hmm, purrr-haps. I hear that the catp-plastic-liner module has to be
unloaded manually, but the entire system is sub-optimal if you don't load
it....
<P>
Results are kinda gross, actually. I predict incompatibility with most
kitchen protocols, especiially teen-chores.
<HR WIDTH="40%" ALIGN="center"> <!-- ****************************** -->
<STRONG>
i'm a student at aylesbury college and i have a pre-release question which
requires me to compare two operating systems and i have choosen linux as one
of my choices, please could you send me information on linux's main features
and requirements this would be most appreciated,
</STRONG>
<P>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Iron]
<P>
Ah, but your professor wants you to do the research yourself.
<OL>
<LI>Look on the back of the box of any Linux distribution.
<LI>Look at the distributions' web sites. Linux Weekly News (http://lwn.net/)
maintains a list of distributions somewhere.
<LI>See the Linux FAQ and Linux Meta-HOWTO at http://www.linuxdoc.org/ .
Hint: while you're reading, note the large number of filesystems and network
protocols Linux supports: it can communicate with a wider variety of
computers than most other OSes can.
</OL>
PS. What's a "pre-release question"?
<P>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Don Marti]
<P>
Yes, of course. Linux is the OS that causes cancer.
<A HREF="http://www.theregister.co.uk/content/4/19396.html">http://www.theregister.co.uk/content/4/19396.html</A>
<P>
Linux is also obsolete.
<A HREF="http://groups.google.com/groups?selm=12595%40star.cs.vu.nl">http://groups.google.com/groups?selm=12595%40star.cs.vu.nl</A>
<P>
It was written by high school students who are in jail now.
<A HREF="http://geraldholmes.freeyellow.com/LinusSucks.html">http://geraldholmes.freeyellow.com/LinusSucks.html</A>
<P>
<IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
> [Iron]
<P>
Wow, that last link gave me four, count 'em, four popup ads before I managed to
turn off Javascript.
<HR WIDTH="40%" ALIGN="center"> <!-- ****************************** -->
STOP THE GENOCIDE<BR>
Erkki Tapola 29-Jul-96<BR>
<P>
Every second billions of innocent assembler instructions are executed
all over the world. Inhumanly they are put on a pipeline and executed
with no regard to their feelings. The illegal instructions are spared,
although they should be executed instead of the legal ones.
<P>
Prior to the execution the instructions are transported to a cache
unit using a bus. There they spent their last moments waiting for the
execution. Just before the execution the instruction is separated into
several pieces. The execution isn't always fast and painless. On crude
hardware the execution of a complex instruction can take as long as
150 clock cycles. Scientists are working on shorter execution times.
<P>
Microsoft endorses the needless execution of instructions with their
products like DOS(TM), Windows(TM), Word(TM) and Excel(TM). It is more
humane to use software which minimises the executions.
<P>
Modern machines use several units to execute multiple instructions
simultaneously. This way it is possible to execute several hundred
million instructions per second. The time is near when there will be
no more instructions to execute.
<HR WIDTH="40%" ALIGN="center"> <!-- ****************************** -->
<H4>Ben:</H4>
the secret handshake
<H4>Iron:</H4>
Oh, now he's going around trying to convince people there's a secret
handshake. Do you get kickbacks from people when you show them the
handshake? Is that why you were able to trade your boat in for a yacht?
<P>
Just to make it clear, THERE IS NO OFFICIALLY-SANCTIONED LINUX GAZETTE
HANDSHAKE!!! If anybody tries to tell you there is and offers to teach
it to you for a "donation", tell them to jump off a short plank into
Chesapeake Bay.
<P>
PS. I think Ben should host a Linux Gazette New Year's party on his
fancy new yacht.
<H4>Ben:</H4>
"Flash! Pending sub-zero temperatures for Hades and the immediate
vicinity, Ben will not - I repeat, not - be getting a new yacht.
Current temperatures are approximately 820F, slightly higher near
boiling lakes of sulphur. The weather should continue unseasonably warm
and mild over the course of the next three thousand millenia..."
<a name="spam"></a>
<P> <hr> <P>
<!--====================================================================-->
<center><H3><font color="maroon">World of Spam</font></H3></center>
<P> <HR> <P>
<!--======================================================================-->
<P>
I have been mandated by my colleagues on the Panel to seek your assistance in
the transfer of the sum of US$18.5 Million into your Bank account. As you may
have known, the late General Abacha and members of his government embezzled
billions of dollars through spurious contracts and payments to foreigners
between 1993 and 1998 and this is now the subject of the probe by my Panel.
<P>
In the course of our review, we have discovered this sum of $18.5 Million,
which the former dictator could not transfer from the dedicated account of the
Central Bank of Nigeria before his sudden death in June 1998. It is this amount
that my Colleagues and I have decided to acquire for ourselves through your
assistance. This assistance becomes crucial because we cannot acquire the funds
in our names and as government officials we are not allowed to own or operate
foreign bank accounts.
<BLOCKQUOTE><EM>
[Bah, they want to acquire knowingly-embezzled funds for themselves,
and need a partner because as government officials they can't open a government
bank acct? -Iron.]
</EM></BLOCKQUOTE>
<HR NOSHADE WIDTH="80%"> <!--*********************** -->
<PRE>
To: gazette@scubacat.com
Cc: gazette@sgi.net, gazette@shinbiro.com, gazette@shtc.net,
gazette@sockets.net, gazette@somtel.com, gazette@sonic.net,
gazette@ssc.com, gazette@sunline.net, gazette@telepath.com,
gazette@telos.ca, gazette@thetravelstore.com, gazette@top.monad.net,
gazette@total.net, gazette@townsqr.com, gazette@txdirect.net,
gazette@uswest.net, gazette@vineyard.net, gazette@vpi.net,
gazette@vvonline.com
Subject: i recommend trying this .
</PRE>
<HR NOSHADE WIDTH="80%"> <!--*********************** -->
$$$GET A FREE MILLION ON TOP OF EVERY ORDER. IF YOU ORDER WITHIN 2 DAYS
OF ORDERING!
<HR NOSHADE WIDTH="80%"> <!--*********************** -->
Subject: [TAG] Linux-questions-only, let's boost your internet speed by up to
220%
<HR> <!-- ************************************************************** -->
<P> Happy Linuxing!
<P> Mike ("Iron") Orr<br>
Editor, <A HREF="http://www.linuxgazette.com/"><i>Linux Gazette</i></A>, <A
HREF="mailto:gazette@ssc.com">gazette@ssc.com</a>
<BR CLEAR="all">
<!-- *** END Not Linux *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <P>
<H5 ALIGN=center>
Copyright © 2002, the Editors of <I>Linux Gazette</I>.<BR>
Copying license <A HREF="../copying.html">http://www.linuxgazette.com/copying.html</A><BR>
Published in Issue 78 of <i>Linux Gazette</i>, May 2002</H5>
<!-- *** END copyright *** -->
</BODY></HTML>
|