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 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> Linux Gazette Table of Contents LG #53</TITLE>
<META NAME="robots" CONTENT="noindex, nofollow">
</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.jpg"
WIDTH="600" HEIGHT="124" border="0"></H1></A>
<H2>May 2000, Issue 53
Published by <I>Linux Journal</I></H2>
<A HREF=../index.html>Front Page</A> |
<A HREF=../index.html>Back Issues</A> |
<A HREF=../faq/index.html>FAQ</A> |
<A HREF=../mirrors.html>Mirrors</A> |
<A HREF=http://www.linuxgazette.com/search.html>Search</A>
</center>
<!--=================================================================-->
<table>
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=30 VSPACE=2 HEIGHT=1
WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
<tr><td>
<table>
<tr>
<td VALIGN="top"><H1><font color="#BB0000">Visit Our Sponsors:</font></H1></td></tr>
<!-- *** BEGIN sponsors *** -->
<TR><TD>
<A HREF="http://www.linuxjournal.com"><IMG ALT="Linux Journal" SRC="../gx/ljtop.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>
<TR><TD>
<A HREF="http://www.pervasive.com/linuxgazette"><IMG ALT="Pervasive Software" SRC="../gx/sponsors/pervasive.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>
<TR><TD>
<A HREF="http://www.linuxcare.com"><IMG ALT="LinuxCare" SRC="../gx/linuxcare.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>
<TR><TD>
<A HREF="http://www.linuxmall.com/"><IMG ALT="LinuxMall" SRC="../gx/linuxmall.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>
<TR><TD>
<A HREF="http://www.linuxjournal.com/lr-toc.html"><IMG ALT="Linux Resources" SRC="../gx/linux6.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>
<TR><TD>
<A HREF="http://www.cygnus.com"><IMG ALT="Cygnus Solutions" SRC="../gx/sponsors/cygnus.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>
<TR><TD>
<A HREF="http://www.vmware.com"><IMG ALT="VMware" SRC="../gx/sponsors/vmware.jpg" BORDER="0" VSPACE="10"></A>
</TD></TR>
<TR><TD>
<A HREF="http://www.infomagic.com"><IMG ALT="InfoMagic" SRC="../gx/infologo.gif" BORDER="0" VSPACE="10"></A>
</TD></TR>
<!-- *** END sponsors *** -->
</table>
</td>
<!--==================================================================-->
<TD ROWSPAN="3" WIDTH="2" BGCOLOR="#000000" NOSAVE><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=1 HEIGHT=1 WIDTH=1%></TD>
<td VALIGN=top>
<H1><font color="#BB0000">Table of Contents:</font></H1>
<!-- *** BEGIN toc *** -->
<UL>
<LI> <a HREF="lg_mail53.html">The MailBag</A>
<UL>
<LI> <a HREF="lg_mail53.html#help">Help Wanted & Article Ideas</A>
<LI> <a HREF="lg_mail53.html#gen">General Mail</A>
</UL>
<LI> <a HREF="lg_bytes53.html">News Bytes</A>
<UL>
<LI> <a HREF="lg_bytes53.html#distro">Distro News</A>
<LI> <a HREF="lg_bytes53.html#general">News in General</A>
<LI> <a HREF="lg_bytes53.html#software">Software Announcements</A>
</UL>
<LI> <a HREF="lg_answer53.html">The Answer Guy</A> , <EM>by James T. Dennis</EM>
<LI> <a HREF="lg_tips53.html">More 2-Cent Tips</A>
<LI> <a HREF="baptista.html">Graphical Programs</A> , <EM>by Paulo Henrique Baptista de Oliveira</EM>
<LI> <a HREF="boldyshev.html">Introduction to UNIX Assembly Programming</A> , <EM>by Konstantin Boldyshev</EM>
<LI> <a HREF="collinge.html">HelpDex</A> , <EM>by Shane Collinge</EM>
<LI> <a HREF="correa1.html">Miguel de Icaza on Gnome and His New Company HelixCode</A> , <EM>by Fernando Ribeiro Corrêa</EM>
<LI> <a HREF="correa2.html">KDE2 is Just Around the Corner. Are You Curious?</A> , <EM>by Fernando Ribeiro Corrêa</EM>
<LI> <a HREF="correa3.html">Linux in France: Guess Mandraksoft's Next Move</A> , <EM>by Fernando Ribeiro Corrêa</EM>
<LI> <a HREF="eyler.html">Functions and aliases in bash</A> , <EM>by Pat Eyler</EM>
<LI> <a HREF="lamb.html">Linux Site O' The Month: SourceForge</A> , <EM>by Sean Lamb</EM>
<LI> <a HREF="okopnik.html">Introduction to Shell Scripting</A> , <EM>by Ben Okopnik</EM>
<LI> <a HREF="sipos.html">Setting Up International Keyboards</A> , <EM>by Juraj Sipos</EM>
<LI> <a HREF="stagner.html">Connecting to Your Home Computer</A> , <EM>by Robert Stagner</EM>
<LI> <a HREF="ward.html">Some issues on floating-point precision under Linux</A> , <EM>by Alan Ward</EM>
<LI> <a HREF="lg_backpage53.html">The Back Page</A>
<UL>
<LI> <a HREF="lg_backpage53.html#authors">About This Month's Authors</A>
<LI> <a HREF="lg_backpage53.html#notlinux">Not Linux</A>
</UL>
</UL>
<!-- *** END toc *** -->
</td>
</tr>
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
SRC="../gx/hammel/cleardot.gif"
ALT="-------------------------------------------------------------"
HSPACE=30 VSPACE=2 HEIGHT=1 WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
</table>
<!--=============================================================-->
<P>
<table>
<tr><td>
<A HREF="issue53.txt.gz">TWDT 1 (gzipped text file)</A><BR>
<A HREF="issue53.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.
</td></tr>
<!--==================================================================-->
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=30 VSPACE=2 HEIGHT=1
WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
<tr><td>
<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-2000 Specialized Systems Consultants, Inc.</H5>
</center>
</td></tr>
<TR>
<TD COLSPAN="3" WIDTH="100%" BGCOLOR="#000000"><IMG
SRC="../gx/hammel/cleardot.gif" ALT="" HSPACE=30 VSPACE=2 HEIGHT=1
WIDTH=1 ALIGN=LEFT></TD>
<TD></TD>
</TR>
</table>
<H4>"Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>
<HR>
<center>
<table width="100%" cellpadding=7><tr><td>
<H2><a NAME="mail"><IMG SRC="../gx/mailbox.gif" ALIGN=MIDDLE ALT=" ">
The Mailbag!</a> </H2>
Write the Gazette at <A HREF="mailto:gazette@ssc.com"> gazette@ssc.com</A>
</td><td>
<H3>Contents:</H3>
<ul>
<li><a HREF="#help">Help Wanted -- Article Ideas</a>
<li><a HREF="#gen">General Mail</a>
</ul>
</td></tr></table>
</center>
<a name="help"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3><font color="maroon">Help Wanted -- Article Ideas</font></H3></center>
<P>
Answers to these questions should be sent directly to the e-mail address of
the inquirer with or without a copy to gazette@ssc.com. Answers that are
copied to <I>LG</I> will be printed in the next issue in the Tips column.
<P> <STRONG>Before asking a question, please check the
<A HREF=../faq/index.html><I>Linux Gazette</I> FAQ</A> to see if it has been
answered there.</STRONG>
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 31 Mar 2000 20:57:04 -0000
<BR>From: The Strangemores <<A HREF="mailto:sstrange@crrstv.net">sstrange@crrstv.net</A>>
<BR>Subject:
<P> Do you know what the Linux kernel split is? If so, can you tell me about
it?
<P> Chantil
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sat, 01 Apr 2000 01:03:33 -0600
<BR>From: Randall E. Cook, Sr. <<A HREF="mailto:Randy@MNCom.Net">Randy@MNCom.Net</A>>
<BR>Subject: Help in setting up Red Hat as a dial-up server
<P> I have searched and searched for 2 months now and can not get any
info on how to set up a server for customers to dial into and access the
internet with mail accounts and such.
I have been to every news group and discussion I can find. No one
will give any information on how to set this up.
The ONLY help or answer I get is...:"why do you want to be an ISP,
they are to expensive to set up?"
Please have a "How-To" for the beginner to set up an ISP for the
first time?
<P> Thanks in advance.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 02 Apr 2000 15:37:16 -0500
<BR>From: Dan Stroock <<A HREF="mailto:dws@math.mit.edu">dws@math.mit.edu</A>>
<BR>Subject: linux and DHCP
<P> I have been trying, without success, to hitch my Linux box to a
Linksys Etherfast cable router. I set networking configuration
to use DHCP, but my machine does not get the information which
it needs. Has anyone got a HOWTO page or other source of information
about this sort of thing?
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 2 Apr 2000 23:31:20 +0100
<BR>From: andrew sprott <<A HREF="mailto:andru@btinternet.com">andru@btinternet.com</A>>
<BR>Subject: sharing filesystems
<P> hi
<P> i have tried searchin your site for 'share', 'sharing filesystem' etc., but nothin
came up. basically, i've got 6 networked machines, half of which can't take
a full installation of suse 6.3. what i want to do is export the installation on
a 20.4gb disk to the other machines. so say, most of /etc can be shared by
the other machines.
<P> the thing is how can linux be installed on the other machines without doin
a seperate install that takes up all disk space on the local machines. has
anybody tackled this and wrote about it? the thing that appeals to me is
the prospect of simply loggin onto any machine and access my usual apps
and data etc.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 02 Apr 2000 22:55:05 -0200
<BR>From: Rakesh Mistry <<A HREF="mailto:rakeshm@REMOVETHIS.netactive.co.za">rakeshm@REMOVETHIS.netactive.co.za</A>>
<BR>Subject: Swing on Linux
<P> Hi
<P> I am having trouble installing Swing1.0.3/1.1.1 on my RH6.0 system. I
have managed to setup jdk117_v3 successfully sometime ago.
<P> I have unzipped the tar.Z and placed it in
/usr/local/lib/jdk117_v3/swing-1.0.3/ directory. I have added this path
to my CLASSPATH. I have also added it to a SWING_HOME variable as well
as added a JAVA_HOME variable.
<P> However, everytime I try and compile a java program which tries to
import a swing package, I get the following error :
<PRE>
SwingUI.java:4: Package javax.swing not found in import.
import javax.swing.*;
^
SwingUI.java:6: Superclass JFrame of class SwingUI not found.
class SwingUI extends JFrame
^
SwingUI.java:24: '(' expected.
panel.setLayout(new BorderLayout);
^
3 errors
</PRE>
<P> I have copied this code straight out of a java tutorial.
<P> Any help would be greatly appreciated !!!
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 03 Apr 2000 17:16:28 +0200
<BR>From: Silvia Scarpetta <<A HREF="mailto:scarpetta@na.infn.it">scarpetta@na.infn.it</A>>
<BR>Subject: linux and win2000
<P> I have updated winNT to windows2000, and LILO is not able to boot either
linux or win2000 , any more
(before I had winNT and Linux on the two harddisks and it works!)
<P> I mean LILO starts but when I says to boot windows2000 it says:
<PRE>
NTLDR is missing.
???????
</PRE>
Anyone knows if win2000 has been made in order to
not to be compatible with Linux?
is there a way to solve the problem?
<P> I tryed to do again
<PRE>
sbin/lilo
</PRE>
(in case the MBR was damneged)
but it did not work either.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 05 Apr 2000 10:53:22 PDT
<BR>From: Paul Grainger <<A HREF="mailto:psfgrainger@hotmail.com">psfgrainger@hotmail.com</A>>
<BR>Subject: Interfacing with Novell Netware
<P> Hi there,
can you help me with tips on how to interface to a Novell Netware network
(3.12 bindery). I am currently running Mandrake 7 and have a 3 Com ethernet
adapter (which Linux seems to be able to auto-configure). Whenever I try to
configure my card the system requests IP addresses, which is not relevant in
this instant.
I know that IPX support is provided but what are the steps required to
enable use of file and print services on the network?
Thanks in anticipation of your help,
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Thu, 6 Apr 2000 23:16:16 +0200
<BR>From: Andrea <<A HREF="mailto:amerini@dada.it">amerini@dada.it</A>>
<BR>Subject: LILO
<P> Hi , I 'm a new user of Linux (Great!!) and I have a little problem:
<P> I have 2 HD , the 1st SCSI with Win 98 and th 2nd EIDE with Red Hat 6.1.
<P> I can't start windoze from LILO , (the machine does nothing)and I must switch the boot from BIOS.
Could you tell me please , how to solve this little problem ?
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 12 Apr 2000 13:42:43 +0200
<BR>From: Otto Wyss <<A HREF="mailto:Otto.Wyss@eds.com">Otto.Wyss@eds.com</A>>
<BR>Subject: More than one keyboard with different layout
<P> Sorry I'm not sure if this is the right place to ask, please tell me the
right place if I'm wrong.
<P> I have 2 keyboards connected to my PC, one is a old AT-serial keyboard
and the other an USB-keyboard with Win98 key assignment. Now I'd like to
modify the keymap so I could use the new Command("Windows")-key.
Unfortunalty this conflicts with the old keyboard (which I still need in
case of an emergency). I have to install 2 different keymaps, each one
for each keyboard. but currently the kernel (2.2.14) only allows for one
keyboard.
<P> My wish for enhancement:
Keyboards should be implemented as ordinary devices in the kernel (like
mouses), so an arbitrary count of keyboards where possible. Keymaps,
kbdrates, etc. should be attached to keyboard devices as well.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 11 Apr 2000 17:47:22 EDT
<BR>From: <<A HREF="mailto:JDGIOVINCO@aol.com">JDGIOVINCO@aol.com</A>>
<BR>Subject: shell scripting in a "C++" based shell
<P> I recently read your article about the basic scripting commands in the April
issue. However, the bash system and i are like oil and water, because i am
more familiar with programing in "C++" After some searching I was able to
find some incredibly informative manuals that also contained cdrom packages
with libraries, patches and other assorted tools to help learn how to script
some of the varieties of "C" based shell. Soon enough, my happiness was
brought to a skreaching halt when i glanced down at some of the prices. So I
was writing to ask if maybe in your next issue, you could follow up the
scripting article with some basic commands in "ksh" or "zsh," or just inform
me of any manuals published within a reasonable price range.
Thanks
<H2>The author Ben Okopnic <<A HREF="mailto:fuzzybear@pocketmail.com">fuzzybear@pocketmail.com</A>> writes:</H2>
<P> My current goal in writing the column is to concentrate on "bash" until I feel that my readers, by following the column, have reached a high enough level of proficiency that they would be interested in other options - and those may include a look at other shells. Unfortunately for your requirements, this isn't likely to happen for quite a long while. Do be aware, though, that unless you get into somewhat deep scripting stuff (co-processes, async pipelines, etc.), there isn't _that_ much difference between, say, "ksh" and "bash": "ksh" is actually a superset of "sh" which is bash-compatible, and "bash" incorporates a number of "ksh" and "csh" features.
<P> Since I don't know what your level of general scripting/shell expertise may be, let me toss in a perspective from my own experience: the first shell that I ever used was "sh", and it was nothing short of a battle to produce my first script, simple as it was. Later, in my rather brief flirtations with other shells, I found that learning their specific syntax was an *incremental* task - I had already learned 90+% of what I needed to write scripts for them via my experience with "sh". You too may find that it isn't only "bash" that is problematic: there is a learning curve associated with any shell - they all have their quirks. I'm certainly not trying to talk you into switching your shell preference, but you should realize that there's a "cost" associated with entering the "shell game" - and the type of shell is, in my opinion, largely irrelevant to that "cost".
<P> Given the nature of Linux, you'll find that the information that is freely available is copious and of high quality. This implies that any commercially available material will be a) _outstanding_ in quality (this is certainly true in my experience), and b) relatively expensive, since "quality costs". My suggestion for you is to study the free material, look for info on the Net (e.g., "ksh keybindings (vi keys)" in The Answer Guy's column, issue 51 of LG, has some good pointers), and study other people's "zsh"/"ksh" scripts (hint: use AltaVista's Advanced search to look for "#!*/bin/[kz]sh".)
<P> By the time you exhaust those resources, you should either feel justified in your purchase of those "expensive" books - or you may decide that you've lerned enough that you don't need them after all.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 12 Apr 2000 14:40:44 -0700
<BR>From: Anderson, Randy (FRM) <<A HREF="mailto:randy.anderson@compaq.com">randy.anderson@compaq.com</A>>
<BR>Subject: adding pseudo devices in a sunos 4.1.4 environment..
<P> hi,
my sunos kernel is already configed for 256 pseudo devices. my users
complain about running out
of them often...i know they are not using even a fraction of that number, so
what gives?? do i need to
add /dev device files? recompile the kernel (GENERIC) again??? help!
<P> thanks for any assistance..
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 14 Apr 2000 11:14:17 -0500
<BR>From: David K. Daniels <<A HREF="mailto:daved@hutchtel.net">daved@hutchtel.net</A>>
<BR>Subject: Is There a Version of PC/NFS for Linux?
<P> I have the O'Reilly book "Managing NFS and NIS" and there is a section in
the back of the book called PC/NFS describing a Unix utility that enables a
PC DOS machine to access a Unix machine using the NFS file system as an
extended DOS file system. I am wondering if there is a Linux version of
this available?
<P> I would like to be able to run a Linux server on a TCP/IP network and have
the capability of booting a PC using DOS and map a drive letter to the file
system running on the Linux server for the purpose of using a utility called
"Ghost" and make a ghost image of the DOS/Windows drive and drop it on the
Linux server for storage.
<P> Any information or pointers would be appreciated.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sat, 15 Apr 2000 00:02:45 +0530
<BR>From: US Mohalanobish <<A HREF="mailto:usmbish@crosswinds.net">usmbish@crosswinds.net</A>>
<BR>Subject: SiS6215C graphics adapter card
<P> Can anybody help me make my SiS6215c graphics card deliver a resolution more than 640x480 in Linux? On Windows, I get resolutions as high as 1024x768 with 256 colors or 800x600 with 16bit colors.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
05 Apr 2000 09:19:10 +0200
<BR>From: Andrés Hortigüela García <<A HREF="mailto:Andres.Hortiguela@csbs.jcyl.es">Andres.Hortiguela@csbs.jcyl.es</A>>
<BR>Subject: Graphics card question (Spanish)
<P> Necesito un driver para la tarjeta grfica integrada en placa base con chipset Intel 810, para configurar mi Linux (EsWare - Red Hat 6.0)
<P> Me podis ayudar? Donde lo puedo obtener?
<P> Muchas gracias, ... Andrs.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 14 Apr 2000 11:50:22 -0700
<BR>From: Ahmad <<A HREF="mailto:al-iman@net.sy">al-iman@net.sy</A>>
<BR>Subject: How to hack a proxy
dear sir
we are in bad need for a program to pass the firewall because our server is filltering the most of hackers sites and all the free Email.
your prompt positive reply is highly appreciated
thanks, best regards.
</BLOCKQUOTE>
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Sun, 16 Apr 2000 14:39:06 -0400
<BR>From: Robin and David Pickens <<A HREF="mailto:rdpickens@email.msn.com">rdpickens@email.msn.com</A>>
<BR>Subject: Downloading X11/ XF86 upgrades
<P> I am new to the alternative OS world of Linux. I recently purchased a (old)
beginners version of Caldera Linux 1.3 and, through much frustration on my part
as well as the tech reps at Mandrake, have come to realize that my computer's
on- board video card is too modern for the XF86Setup v. 3.3.2. I discovered (I
think) that XF86Setup v. 3.3.6 is the updated one which supports my card (a
Trident Blade 3D/ MVP4). I went to the XF86 web site to download the proper
files and uncovered a plethora of files and folders that have left me rather
confused as to which ones to use. Can anybody tell me which ones (specifically)
from that site to download or, direct me to another mirror site with a bit less
confusing archives and easier to follow guidelines for acquiring these most
needed programs? P.S. I have looked through "rpmfind.net" and could only find
version 4.0 of XF86 for Trident Blade cards. The tech rep at Mandrake said 4.0
would probably not help me. Any further assistance would be greatly
appreciated. Thanks, David P.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 17 Apr 2000 15:34:34 +0530
<BR>From: Prakash Nair <<A HREF="mailto:nairp@zeenetwork.com">nairp@zeenetwork.com</A>>
<BR>Subject: Switching from Xchange Server To Linux
<P> Hello..
I hope u can help me with this. We have MS Exchange server with 400
users.We would now like to switch to linux as the mail server(remove Xchange
server). How could this be done?
<P> Pl. help as this is to be done urgently.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 17 Apr 2000 14:39:39 -0700
<BR>From: Chetan Gadgil (Work - Linux) <<A HREF="mailto:chetan@objectstream.com">chetan@objectstream.com</A>>
<BR>Subject: Porting to a new language
<P> I am interested in porting Linux to "Indic (Indian)" languages. Is there
a good place to start?
Could anyone please provide a brief outline of how a port to a new
language/script is done?
<P> Does Linux use GNU/gettext for the locale specific languages?
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 18 Apr 2000 04:18:11 -0700 (PDT)
<BR>From: Phil Coval - RzR.online.FR <<A HREF="mailto:philippe_coval@yahoo.com">philippe_coval@yahoo.com</A>>
<BR>Subject: is Debian deadbian ?
<P> When next debian is out ?
<P> i've seen on magazine that it will be out in a few
weeks that was on jannuary 2000 ?
the site isnt updated
<P> Whats the matter ?
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 18 Apr 2000 09:32:26 -0500
<BR>From: Mark Contatore <<A HREF="mailto:contatorem@iivip.com">contatorem@iivip.com</A>>
<BR>Subject: Compaq help
<P> I recently acquired a Compaq ProSignia 300, it has the on board NCR53C810
SCSI controller. I have been totally unsuccessful in installing RedHat
Linux 6.2, the system indicates the driver is incorrect . I am asking for
anyone with the experience of a successful install on this platform to
please help!
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 19 Apr 2000 14:50:52 +0200
<BR>From: Joseph Simushi <<A HREF="mailto:jsimushi@pulse.com.zm">jsimushi@pulse.com.zm</A>>
<BR>Subject: LAN Administrator Books.
<P> Help me with information as regards where I can find the above books or if
you offer some, please send me some on the address below.
<P> Regards,
<P> Simushi Joseph<BR>
LAN Administrator<BR>
PULSE Project<BR>
P.O. Box RW 51269<BR>
Lusaka<BR>
Zambia.<BR>
Tel: 295642 (W), 250236 (H)
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 19 Apr 2000 15:23:27 +0100
<BR>From: Stephen Wileman <<A HREF="mailto:Pcrep@mancat44.freeserve.co.uk">Pcrep@mancat44.freeserve.co.uk</A>>
<BR>Subject: linux courses / books
<P> I am IT teacher being asked a lot of questions to do with
the linux operating systems in particular Linux Red Hat 6 and
above.
<P> Please could you help with any suggestions on a good basic book
or material which I could use to help my students out with their
problems or a any recognised Linux professional qualifications I
can undertake to aid my own understanding of the Linux / Red
Hat operating system?
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 19 Apr 2000 20:28:49 -0700 (PDT)
<BR>From: Venkat Rajagopal <<A HREF="mailto:venkat_rajagopal@yahoo.com">venkat_rajagopal@yahoo.com</A>>
<BR>Subject: Command line editing
<P> Hi,
<P> I have been trying to set command line editing (vi mode) as part of my
bash shell environment and have been unsuccessful so far. You might think
this is trivial - well so did I.
<P> I am using Red Hat Linux 6.1 and wanted to use "set -o vi" in my start up
scripts. I have tried all possible combinations but it JUST DOES NOT WORK.
I inserted the line in /etc/profile , in my .bash_profile, in my .bashrc
etc but I cannot get it to work. How can I get this done? This used to be a
breeze in the korn shell. Where am I going wrong?
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Thu, 20 Apr 2000 21:59:27 +0200
<BR>From: Matej Cepl <<A HREF="mailto:CeplM@seznam.cz">CeplM@seznam.cz</A>>
<BR>Subject: Other markup languages - LG #27
<P> Hi,
<P> I have found your article on "markup languages and lout" on the
website of Linux Gazette. Thank you for it -- as beginer in lout (and
emigre from LaTeX), I have greatly appreciated it your open attitude
towards something different than TeX.
<P> However, I would be very interested in other articles from series --
on TeX and troff. When I tried to found them on LG site, I have not
found either of them. Are they presented anywhere on the Web? If
so, would you be so kind and send me URL, please?
<P> Have a very nice day
<P> Matej Cepl
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Thu, 20 Apr 2000 16:37:53 -0700
<BR>From: Martin Perry <<A HREF="mailto:m.perry@dtn.ntl.com">m.perry@dtn.ntl.com</A>>
<BR>Subject: Screen Dump of Linux
<P> I am writing to request a screen dump picture of what Linux looks like when it is running.
<P> I am currently doing a HNC in Business Information Technology and I have got to give a presentation on Linux in a weeks time and would like to put a screen dump on the OHP for people to see. From what I understand it can either look like windows or the Mac equivalent.
<P> I have been searching for days to find this on the net with no luck as yet.
<P> Sorry for any inconvience.
<P> Maria Perry.
m.perry@dtn.ntl.com
<BLOCKQUOTE> <EM>
[I think several distributions have such images on their web sites,
usually in a section called "Screenshots". Go to
<A HREF="www.linuxjournal.com">www.linuxjournal.com</A>,
"How to Get Linux" and follow the links from there.
<P> Also, the GUI interfaces (KDE and GNOME) and window managers have
screen shots on their web sites, to give you a preview of what the
program will look like. <A HREF="http://www.kde.org">www.kde.org</A>,
<A HREF="http://www.gnome.org">www.gnome.org</A>,
<A HREF="http://www.enlightenment.org">www.enlightenment.org</A>,
<A HREF="http://www.windowmaker.org">www.windowmaker.org</A>,
<A HREF="http://www.plig.org/xwinman/fvwm95.html">
http://www.plig.org/xwinman/fvwm95.html</A>, etc. -Ed.]
</EM> </BLOCKQUOTE>
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 11:41:19 +1000 (EST)
<BR>From: Russ Pitman <<A HREF="mailto:russ@tasman.net.au">russ@tasman.net.au</A>>
<BR>Subject: BU backup utility
<P> This was the subject of an excellent article in Issue 32 of
the Gazette.
<P> My only hard copy is missing and the site (http://www.crel.com)
is not reachable. Also mail to vstemen@crel.com is undeliverable.
<P> Web searching has not, for me, found any other address for bu
so I came here hoping that the Gazette can help.
<P> Does any one know where a copy of Vincent Stemens 'bu' can be
obtained.
Thanks for your time.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 00:21:56 -0700
<BR>From: MVE <<A HREF="mailto:getsome@mcsi.net">getsome@mcsi.net</A>>
<BR>Subject: Please Help
<P> Please help me. I am at my wits end.
<P> I have VERY recently installed Linux, so I am very new to all of this, and
pehaps I am going about this the wrong way. I want to install Oracle8i on my
system. ALL the information says I have to install a JRE (JRE 1.1.6v5) in order
to get Oracle to work. (NOT JDK...JRE).
<P> I CAN NOT find it for the life of me!!!! PLEASE PLEASE PLEASE do not send
me to Blackdown.org. They do not have it either. Do not send me to Sun, because
they do not have it either. Nor does Susie, nor does Red Hat...NOBODY!! I can
NOT find it. What is up with this??? Is this usual? Why would a company sell me
an operating system (I know, it's free), and the SAME company (Mandrake) sell
me the Oracle81 program, and NOT include it in their package??? (They don't
have JRE 1.1.6v5 either)!
<P> Where can I find it???? I am becoming very discouraged with all the support
I have heard about concerning Linux...(there doesn't seem to be ANY).
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 03:30:51 -0700 (PDT)
<BR>From: belahcene abdelkader <<A HREF="mailto:belahcene@yahoo.com">belahcene@yahoo.com</A>>
<BR>Subject: troubling with ftp , telnet
<P> hi,
someone can help me!
I have a lab with several PCs, pentium II, running
under linux redhat 6.0. The installation is complete
on
each one, with ftp, http, telnet etc.... The ping is
correct for all machines.
I can use internet with netscape from each one. I
use one machine as server with proxy.
Clearly :
I have machine 1 with proxy package, this machine is
connected to internet via modem, the machines 2
and 3 are connected in LAN and can access to internet
via machine 1.
My probleme is: when I want to get file from one
machine in another, via ftp, the system refuse with
non
permission. Sometimes it is possible in one sens and
not in the other.
I have the same probleme with telnet.
I have login and passwd in all the machines and i can
enter as root.
Thank you.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 21 Apr 2000 18:48:03 BST
<BR>From: Ben Parsons <<A HREF="mailto:ukbenz@hotmail.com">ukbenz@hotmail.com</A>>
<BR>Subject: Help with email
<P> Hello. I've only just really started out with linux Mandrake (call it
redhat) and I wanted to know if I can get my hotmail email into say, Pine or
Elm, I looked through all the docs but it dosen't mention it and in any case
I don't know where to start. Cheers in advance to anyone who can help.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 00:36:59 +0200
<BR>From: Gonzalo Aguilar <<A HREF="mailto:gad@reymad.com">gad@reymad.com</A>>
<BR>Subject: XFree 4.0 and internationalization
<P> Hello, I'm an Spanish linux user and XFree 4.0 is having problems with
the "special characters" of my keyboard.
<P> I cannot write letter with "" on the top (is very important for my
languaje) or cannot put "" also.
<P> Those work after in XFree 3.3.5 but now...
<P> Do you know any tips on this. Nobody seems to know cause a lot of people
has the same problem.
Thanks
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 10:43:12 +0200
<BR>From: Dominic STEUR <<A HREF="mailto:dominic.steur@belgacom.be">dominic.steur@belgacom.be</A>>
<BR>Subject: GUI
<P> Hello,
I am kind of a beginner in the linux world and I have little knowledge about
unix and even less about linux.
I have installed the Linux Redhat 6.1 recently, and that went quite smooth,
it is on an intel machine with now
a lilo boot and a win2000 boot menu, in which I can choose 98 or 2000.
Here comes my problem: when booting the linux i end up in the bourne-shell
login screen, but this is not quite what
I had in mind for interface...
i had performed the gnome workstation installation, so it should end up in a
x-windows environment if I am correct.
When i did an upgrade installation, it became clear that there were no
interface ( or similar) packages installed, so
I selected the lot of them and installed it. But after rebooting the
bourne-shell was back, and I am at a loss.
It probably is a stupid problem with a simple solution (I hope), but I fancy
some help.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 18:19:37 +0100
<BR>From: <<A HREF="mailto:saqib@saqib-shaikh.freeserve.co.uk">saqib@saqib-shaikh.freeserve.co.uk</A>>
<BR>Subject: A Problem
<P> Dear Editor,
<P> My name is Saqib Shaikh and I live in the UK. I have been reading
Linux books for a few years now, and decided to put my knowledge
into practice. I got out my CD of Slackware 3.6, and my old
computer. My computer's specifications are: 486, 33 mhz
processor, 4 MB RAM, 80 MB hard drive. The Slackware guide
said that 4 MB was enough RAM, so gave it a go. I made the boot
and root floppies. I inserted the boot floppy, powered up, inserted
the root floppy when asked. It stood there, blank screen, doing
nothing. I thought on such an old computer it must just be taking
its time. 25 minutes later I pressed ctrl+alt+del. This has resulted
in my computer, whenever turned on, giving the error "Cannot find
ROM basic"!. It does not even check the floppy disk. One last thing
to mention is that before starting the install I used fdisk to remove
all partitions, and used fdisk /mbr to remove the mbr. I would be
extremely greatful for your help. I do not mind throwing the
computer away, but rather would like to learn the cause for the
future.
<P> REgards, Saqib Shaikh
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 18:19:37 +0100
<BR>From: Linux Gazette <<A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A>>
<P> Hai,<BR>
I want to take backup on HP 5GB Dat Drive.
Could u please help me any body how to configure it.
Thanks in advance.
<BLOCKQUOTE> <EM>
[I inadvertently cut off the querent's name and e-mail address.
Please send answers to the <EM>Gazette</EM>. -Ed.]
</EM> </BLOCKQUOTE>
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 25 Apr 2000 18:19:37 +0100
<BR>From: Linux Gazette <<A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A>>
The following questions received this month are answered in the
<A HREF="http://www.linuxgazette.com/faq/index.html">Linux Gazette FAQ</A>:
<UL>
<LI> Will my Winmodem (this time a PCI Internal faxmodem Well FM-56PC
V:RWH-A) work under Linux?
</UL>
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 26 Apr 2000 10:52:35 +0800
<BR>From: Kana Krishna <<A HREF="mailto:Kana_Krishna@netcel360.com">Kana_Krishna@netcel360.com</A>>
<P> My name is Kanagaraj and I'm from Malaysia . Currently I'm doing my degree
in Computer Science in a local university here . I need help in creating a
script that can log into telnet or ftp server ( with user name and password
) to copy a file(log file) and send it to a pc that
is connected to the network . What I really need to do is :-
<OL>
<LI> Telnet a site with its password and user name.
<LI> From there , ftp another site (with password and user name).Get a
log file and send it through both the servers again to a pc that is
connected to the network
</OL>
<P> I need the automate the process by scripting for one of my projects and I'm
really having a tough time doing it . I'm have to connect using MS-Dos
enviroment. As I was looking for some information or somebody to help me , I
found your e-mail address in one of the web sites . It would nice if you
could help me .Bye
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Wed, 26 Apr 2000 18:42:50 -0400
<BR>From: Aurelio Martínez Dalis <<A HREF="mailto:aureliomd@cantv.net">aureliomd@cantv.net</A>>
<P> My Name is Aurelio Martínez, from Venezuela, Latin America. I speak
english just a little, and I am a Linux begineer. I would like to know if
exists any other video system for linux other than X11, free or comercial,
under development or stable. Can you help me ? Thanks.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 28 Apr 2000 14:42:50 -0400
<BR>From: Roland Glenn McIntosh <<A HREF="mailto:roland@sunriselabs.com">roland@sunriselabs.com</A>>
<BR>Subject: Two problems - change password with Eudora, how to APOP?
<P> I'm using the IMAP package, whichever version comes with Red Hat Linux 6.2.
I'd like to be able to change my mail password on the server from the client,
using Eudora's "change password" feature.
<P> I'd also like to be able to use APOP authentication, though I haven't seen
how to set this up anyplace on the server side. Please help!
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Fri, 28 Apr 2000 15:05:17 -0700
<BR>From: Julio <<A HREF="mailto:axios@dccnet.com">axios@dccnet.com</A>>
<BR>Subject: leading distributions
<P> hello there folks,
<P> thank you for the quality publication
<P> would you please help me find information on the leading distributions of
Linux?
<P> I have looked everywhere I can think of, including linuxorg, linux this and
linux that. Also IDC and IDG. Internet.com, cnet...
<P> where o where can I find a simple explanation of the top distributions,
what is their market share, how many copies each has sold and if it is broken
down by continent then all the better.
<P> sorry to bother you but after 3 days of fruitless searching, I just came to
the conclusion that I should start asking people who are likely to know
<P> I am another new convert - I am having a dual processor Linux machine
built as I type this and will deep six Windows for good. Finally. And good
riddance.
<P> please help if you can, even if you don't know that answer, please direct
me to somebody that does know the answers to the above questions.
<P> thanks for your help,
<a name="gen"></a>
<P> <hr> <P>
<!-- =================================================================== -->
<center><H3><font color="maroon">General Mail</font></H3></center>
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 3 Apr 2000 23:27:54 -0400
<BR>From: Pierre Abbat <<A HREF="mailto:phma@oltronics.net">phma@oltronics.net</A>>
<BR>Subject: Best Linux and BestCrypt
<P> Best Linux is at Technology Center Hermia, Tampere. BestCrypt is by Jetico,
which is on Hermiankatu, Tampere. Any connection?
<P> phma
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Tue, 11 Apr 2000 15:23:46 GMT
<BR>From: Harry <<A HREF="mailto:harryw@thegenstore.com">harryw@thegenstore.com</A>>
<BR>Subject: Good work.
<P> Hi
<P> I read the Linux Gazette regularly, but I hadn't read it for the few
months just passed. I read the new cartoon Helpdex, and
really liked it. So much in fact that I decided it was worth
e-mailing you to tell you that I think it's a great addition to
a great 'Zine.
<P> Keep up the good work.
<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Mon, 24 Apr 2000 17:45:25 GMT
<BR>From: Michael Williams <<A HREF="mailto:iamalsogod@hotmail.com">iamalsogod@hotmail.com</A>>
<BR>Subject: Newbie installation tips and reorganizing the tech support columns
<BLOCKQUOTE> <EM><H4>[These are excerpts from a long conversation. My
proposal is near the end. Readers: please send in your suggestions or offers
to help! -Ed.]</H4></EM></BLOCKQUOTE>
<P> How about setting up a regular section where people email their problems
with setting up Linux, especially on a machine that already runs windows
(along with the solutions of course). I'm suggesting this because of the
problems that I found when installing Linux - I believe that this is a major
factor in stopping people from using the operatins system. It wouldn't be
immediate, but I would be happy to put it all together if you would just
mention it in the next issue.
<H2>Your humble Editor wrote:</H2>
<P> How would this be different from the Mailbag/2-cent Tips and The Answer Guy?
Do you wish the installation questions moved all together under their own
heading? Or what is it you're looking for?
<H2>Michael responded:</H2>
<P> Okay....
<P> 1. It is different from the answer guy/2 cent tips as it allows the readers
to offer their solutions for problems. As good as he is, the answer guy
cannot answer every problem that may arrise simply because of the range of
hardware available. If enough people responded, it would end up as a pretty
comprehensive list of problems that may arrise during the Linux
installation. I see your point, it is fairly
similair to two cent tips. However, it would be purely based around
installation issues.
<P> 2. Yes, I believe that the installation issues should be moved under a
seperate heading. This is by far the most difficult/traumatic part of Linux (in
my view), especially when there's another OS involved (ie windows). This put me
off installing Linux for almost two whole years. Those were two wasted years -
there should definately be a comprehensive and detailed guide to installing
Linux (yes, I know they do exist, but I haven't seen any that allow user
contribution on this scale).
<H2>Your magnificent Editor wrote:</H2>
<P> You are very right about people putting off installing Linux because of
potential installation problems, and how this is "wasted time" when they could
be learning the OS. Unfortunately, even the most comprehensive book will not
cover all situations.
<P> I'm cc'ing Jim Dennis and Heather Stern (the Answer Guy and HTML Gal)
and Margie Richardson (the Ruler of the Gazette) to get their input
on this.
<P> A good portion of our questions are indeed first-time user issues, and
another good portion deals with adding hardware. I'm unsure whether
trying to separate those questions out would be worthwhile. The thing is, the
technical details regarding first-time installation also come back when you add
new hardware, install Linux on `a different computer, etc.
<P> Would you be interested in coordinating the installation- and hardware-
related questions in the Mailbag and 2-Cent Tips?
<P> You could also build something like a knowledge-base index based on
subject with links to the letters, if you're ambitious. This would be
something to help newbies find the information they need.
<P> The LG FAQ also has a section for questions that come up so frequently
(like Winmodems) that Jim, Heather and I get tired of repeating them,
so we just point people to the FAQ. If you'd like to augment that
section of the FAQ, it might help some readers. (Now if readers would only
realize the FAQ exists. It seems that links on every page and even a link in
the blurb about how to submit a question doesn't help....)
<H2>Heather Stern chimed in:</H2>
<P> Also with many querents it's not clear if they'd fall into the space of
"first tine user" - they didn't say, so we'd be presuming to say so. And
a very experienced person is often new to the one aspect they're asking about.
<P> The readers already are supposed to be putting forward their own problems
and solutions with 2cent Tips; but we're getting an increase of people
sending raw Tips to The Answer Guy, usually inspired by a previous letter
in his column.
<P> My personal inclination would lean toward, if Michael's willing to
coordinate it, sprouting Tips (short answers only), Answer Guy, and the
Clueful Hoard (i.e. answerguy like answers from the readership, to
technical questions to the Mailbag) into its own meta-section, with the
FAQ and/or sorted best answers prominently bulleted below these. For such
an endeavor I'd be happy to throw together some extra graphics, and send
him the current edition of the AnswerGuy preprocessing script, with some
docs on how to use it effectively :)
<P> This would mean some things that presently get pubbed as Tips, and some
messages that come to The Answer Guy, would be moved to the Clueful Hoard.
<P> Jim had originally (way back in the teen issues) figured the Answer Guy
would someday become an Answer Gang. This is one way to do it. Another
way to do it would be to turn Answer Guy into a moderated list where the
querent gets a consensus or best answer from the Gang. I have on occasion
piped in an editorial comment as well...
<P> It's hard to tell who uses Past Answers since if they got their answer,
they generally don't email us...
<P> I made an attempt at sorting Past Answers into topics and Michael, you're
welcome to look at them, even, to become their maintainer (I'm usually a
month or two behind on them), and for the FAQ too. Deciding on where to
split the topics can be difficult, even if you're willing to link a question
multiple times. It's behind (3 months I think ;P) but -All- the answers the
Answer Guy wrote up to the last maintenance visit I made to them, are in the
Past Answers.
<H2>Your all-around good guy Mr Editor wrote:</H2>
<P> I'm hearing lots of good suggestions. Let's think about it for a month
before deciding what to do. We have two requests: (1) giving Linux newbies
better access to information about configuring their hardware, and (2) a
general reorganizing of the tech support columns.
<P> It's clear that the Answer Guy column is better organized than the
Mailbag/2-Cent Tips in regard to finding the messages that deal with your
question, so I'd like to consider moving all the tech support questions to
that framework. The Mailbag would then be just for general mail (which usually
means mail about the <EM>Gazette</EM>), and 2-Cent Tips would be for standalone
tips: nifty shell scripts, cool .bashrc settings, etc. (I really enjoy doing
the standalone tips, so nobody's taking that part away from me. :)
<H2>Heather responded:</H2>
Michael wrote:
<BLOCKQUOTE>
How about creating a regular section entirely devoted to newbie's? It would
almost be like a 'sub magazine' in its own right, with its own sections. To
go into more detail....
</BLOCKQUOTE>
<A HREF="http://www.linuxnewbie.org">www.linuxnewbie.org</A> and
<A HREF="http://www.linuxstart.org">www.linuxstart.com</A>
(multilingual)--both aimed at newbies--already exist.
<BLOCKQUOTE>
It would be split up into 5 seperate sections:
<P> 1. Distrubution Reviews (which would have an archive of distribution
reviews as well as new ones)
</BLOCKQUOTE>
Just another article type, really.
<BLOCKQUOTE>
2. A newbie version of the answer guy (all newbie questions would go here)
</BLOCKQUOTE>
<P> The Answer Guy is popular because he is (1) an ordinary person answering
ordinary people and (2) he will chase down a lot of weird answers (his
experience can lead him to give much better than a newbie knows to ask for).
<P> I think it is harmful rather than helpful to suggest that newbies should
somehow get shoved into a corner (what, they're not "allowed" to speak to
the answer guy? the same one who actually -answers- when he gently flames
the poor weener who is not quite on-topic, or has asked in a creatively
misunderstanding way? I don't think so) And lest you suggest that I have no
experience with them... I teach on Mondays, to a few people who are newbies
to Linux and computers themselves at the same time. If you'd be assuming
that they even know what an A: is... you'd do them a terrible disservice.
<P> I have no objections to a transformation into a Answer Gang (multiple gurus
in the column, maybe more bubble types?) or a Clueful Hoard (someone edits
answers from the multitude into a similar column, while the wizardly Answer
Guy answers his as well) but I have a *serious* objection to completely
restructuring the whole webzine.
<BLOCKQUOTE>
3. Reader's Tips (this is basically my original idea, concentrating mainly
on installation and compatibility issues. It too would have an archive
section split up into easily findable topics)
</BLOCKQUOTE>
<P> Tips already exists as a column. If you're interested in becoming a
maintainer for it that would probably be great.
<BLOCKQUOTE>
4. Programming for Newbies (programming is an -extremely- important part of
Linux. It would not concentrate on more complex and specific issues. It
would deal with more general and introductory topics and contain links to
reference material.
</BLOCKQUOTE>
<P> This could easily become a longterm column of its own, the transformation
of one unfamiliar with programming into a script wizard and junior programmer.
Good idea.
<BLOCKQUOTE>
5. Feature artical (each month it would contain a different feature e.g
setting up Linux under windows etc....)
</BLOCKQUOTE>
<P> You're welcome to contribute ordinary articles to the Gazette during any
month whatsoever, and if you can encourage others to do so also, more power
to you.
<P> Didn't we used to have a "weekend mechanic" section?
<BLOCKQUOTE>
Of course, I would be happy to moderate and design this with a little help.
It would not be a huge, certainly not the size of the magazine itself. If
you want to encourage people to use Linux and get the most out of it, a
section like this would be great. I know it is a lot more than I originally
suggested, but I for one certainly believe it would be a good idea.
</BLOCKQUOTE>
<P> On the one hand I want to encourage the enthusiasm. On the other, I'd like
to note, it's a lot of work merely to corrdinate the answerguy letters into
one column. I think at one point it was about half the work in the whole
magazine, and that I took it over from Marjorie both made TAG look better,
and allowed Marjorie some breathing room to make the Gazette better. I do
not honestly believe that one person can do all of this that you describe
without ramping up to it. Though you claim it'd be smaller than the zine,
it sounds bigger than the early issues of it, and Marjorie had her hands
full every month back then too.
<P> Take over the FAQs and Past Answers and mush them together nicely, or start
writing articles regularly. Heck, if you can manage to do both of those
every month without going completely bonkers, maybe a "section for newbies"
will be completely and utterly unnecessary, because they will tend to find
what they are looking for.
<H2>Michael wrote:</H2>
<P> I would be happy to help out in any way that I
can, just tell me what to do :-). Your comments were justified - it would
involve a huge remake of the overall layout and a considerable ammount of
work. Thanx for your time :) (No hard feelings by the way).
<H2>Your Editor, who rode his bike to work and enjoyed the sunshine, wrote:</H2>
Heather wrote:
<BLOCKQUOTE>
I think it is harmful rather than helpful to suggest that newbies should
somehow get shoved into a corner
</BLOCKQUOTE>
<P> I agree with Heather here. Everybody is a veteran at some things and a
newbie at others.
<P><FONT SIZE="+1"> <STRONG>
Here's a proposal:
<OL>
<LI> Create a topic index covering both articles and tips
<LI> Answer Guy -> Answer Gang/Clueful Hoard
<LI> All tech support questions/answers -> Answer Gang/Clueful Hoard
<LI> Have more articles and series like the Weekend Mechanic
</OL>
</STRONG></FONT>
<P> Now to elaborate.
<H4>#1 -- TOPIC INDEX</H4>
<P> This would help newbies (and veterans) find the articles/letters
relevant to their problem. We'd have to decide on categories (e.g.,
Network/PPP, Hardware/Video Cards, XWindows).
<P> The back end for this is partially covered: each article and TAG answer
already has its own URL, and some tips (not in recent issues) have their
own anchor links as well. Somebody just needs to categorize the items
and create the entry links in the index. For tips without their own
anchor link (=all the recent issues), we'd just have to link to the
page.
<P> If we can build a framework that allows contributions from home, then
readers can submit, say, a text file containing all the index
entries for issue X (category, link title, URL), and a script can merge
these into the index. I can categorize the articles for each current
issue, and the Answer Gang can do the same for the tips, and volunteers
can do the back issues gradually one by one.
<H4>#2 -- Answer Gang/Clueful Hoard</H4>
<P> We need to get more people working on this before we all get burned out.
<P> Heather, can you and Jim propose some logistics on how we could
coordinate keeping the Gang together and getting each question to the Hoard and
moderating the answers? We first need to know what needs to be done, then we
can figure out who will do what.
<H4>#3 -- Moving the tech support letters/tips</H4>
<P> This will have to wait until the Answer Gang is ready to take it on.
<H4>#4 -- More articles/series</H4>
<P> This will take care of itself as potential authors propose things.
We can list in the Mailbag what series are missing and desired.
<BLOCKQUOTE>
This could easily become a longterm column of its own, the transformation
of one unfamiliar with programming into a script wizard and junior programmer.
Good idea.
</BLOCKQUOTE>
We have two articles this issue on shell scripting. If the authors
would like to put their heads together, perhaps they can come up with
some ideas and manpower for a series or two. Programming of course
covers several areas: shell, scripting languages (Python, Perl, etc.),
C-like languages, assembly/low-level stuff, and others. One series
would be able to cover probably only one of those.
<BLOCKQUOTE>
Didn't we used to have a "weekend mechanic" section?
</BLOCKQUOTE>
We did, but the author John Fisk is no longer available. If somebody
wishes to revive it, that would be great.
<!-- *** BEGIN copyright *** -->
<P> <hr> <P>
<H5 ALIGN=center>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.
Copyright © 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>"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="#distro">Distro News</A>
<li><a HREF="#general">News in General</a>
<li><a HREF="#software">Software Announcements</a>
</ul>
</td></tr></table>
</center>
<P> <hr> <P>
<!-- =================================================================== -->
<center><IMG ALT=" " SRC="gx/cover73.jpg" WIDTH=200 HEIGHT=268></center>
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<font color="green">
May 2000 <I>Linux Journal</I>
</font>
</H3>
<P>
The May issue of <A HREF="http://www.linuxjournal.com/"><I>Linux
Journal</I></A> is on the newsstands now.
This issue focuses on Programming and includes a
<STRONG>Python supplement</STRONG>.
<P> <I>Linux Journal</I> has articles that appear "Strictly On-Line".
Check out the Table of Contents at
<A HREF="http://www.linuxjournal.com/issue73/index.html">
http://www.linuxjournal.com/issue73/index.html</A> for articles in
this issue as well as links to the on-line articles.
To subscribe to <I>Linux Journal</I>, go to <A
HREF="http://www.linuxjournal.com/subscribe/index.html">
http://www.linuxjournal.com/subscribe/index.html</A>.
<P>
<font color="green">
For Subcribers Only</font>: <I>Linux Journal</I> archives are available
on-line at
<A HREF="http://interactive.linuxjournal.com">
http://interactive.linuxjournal.com/</A>
<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">BlueCat
</FONT>
</H3>
<P> SAN JOSE, Calif. - March 6, 2000 - Lynx Real-Time Systems, Inc., today
announced delivery of Hewlett-Packard Company's (HP) ChaiVM, embedded
virtual-machine technology on Lynx' BlueCat Linux operating system (OS).
BlueCat users can now field soft real-time Java applications in a wide
range of products using the Java-compliant embedded virtual machine from HP.
<P> BlueCat offers a fast, interpretive byte code execution and a Java
native interface to bind Java threads to BlueCat pthreads for deterministic
scheduling. BlueCat features a reduced run-time footprint, as small as
600K, and concurrent, incremental garbage collection contributing to
predictable soft real-time performance.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Corel
</FONT>
</H3>
<P> Following the launch of Corel LINUX OS in November 1999, Corel's U.S.
retail market share for Linux increased more than eight times to 19.3
per cent as of February 2000. Prior to the release of Corel LINUX OS,
the company held 2.3 per cent of the retail market share based on sales
of Corel WordPerfect 8 for Linux. Corel also released WordPerfect
Office 2000 for Linux in March.
<P>
The free Corel LINUX OS Download is NOW available! Check it out at
<A HREF="http://linux.corel.com/">http://linux.corel.com/</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Debian
</FONT>
</H3>
<P> Debian has recently added another machine to its computing resources. The
system is an UltraSPARC 60 with dual 360Mhz CPU's and 512Megs of RAM. It
was donated by Sun Microsystems <http://www.sun.com/>. To add to the system,
Sun also donated a Netra st A1000 Telecom Class storage array. The array
contains eight 9gig 10k RPM drives, for a total of 72gigs of raw capacity.
The storage unit, configured as a RAID 5 system, will serve as Debian's new
primary internal archive server. IntraServer <http://www.intraserver.com/>
also assisted in getting this system operational by donating the PCI
Differential UltraWide SCSI Controller that the array is attached to.
<P> The system is currently running Debian's frozen SPARC GNU/Linux
distribution, potato (aka, Debian 2.2), utilizing a 2.2.15-pre11 SMP
kernel. The machine is being hosted at VisiNet <http://www.visi.net/>,
a Winstar owned ISP <http://www.winstar.com/>.
<P> Debian wishes to thank all of the contributors of the system and hosting
site as well as the developers who invested time and effort into testing and
configuring the system for Debian's network. Thank you!
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Mandrake
</FONT>
</H3>
<P> INDIANAPOLIS - March 27, 2000 - Macmillan USA, the Place for Linux,
(<A HREF="http://www.placeforlinux.com">www.placeforlinux.com</A>), announced
Secure Server 7.0 for professional server administrators. Macmillan's new
product is a secure Linux web server built within the new Linux-Mandrake(tm)
7.0 operating system. With Secure Server 7.0, managers of mid-level traffic
web sites will have a secure server solution.
<P> Secure Server 7.0 provides graphical tools for easy Linux installation
and disk partitioning. The Apache-based web server utilizes RSA's
BSAFE SSL-C technology - the best technology available for encryption
and security. Secure Server 7.0 is designed for the Linux professional
responsible for managing an e-commerce, intranet or any web site
requiring security. Additional tools, utilities, and documentation
round out the product, providing more value and functionality.
<P> Secure Server 7.0 is available now at an MSRP of U.S. $149.95.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">SuSE
</FONT>
</H3>
<P> NUREMBERG, Germany -- March 13, 2000 -- SuSE Linux today announced that
it has designated VA Linux Systems' SourceForge, the
world's largest Open Source development center, as a primary mirror for
ftp.suse.com, to help improve the availability of SuSE Linux via download.
<P> SuSE Linux is available for download at
<A HREF="ftp://download.sourceforge.net/pub/suse/">
ftp://download.sourceforge.net/pub/suse/</A>, which carries the full FTP
version of SuSE Linux, as well as ISO images of the evaluation version,
updates and fixes.
<P> Further, SuSE Linux is now offered as a platform on the SourceForge
CompileFarm, a unique service that gives Open Source developers a
convenient way to build and test applications on multiple versions of
the Linux and BSD operating systems over the Internet. The SourceForge
CompileFarm enables Open Source developers to automatically create
packages that can be installed on SuSE Linux using SuSE's YaST
installation tool, without having to compile the programs manually.
<P>
SuSE announced a deal with Fugitsu
Siemens Computers, Siemens Business Services and Siemens IT Service to
deliver SuSE Linux-based systems with complete customer and sales support.
With a global reach, the Fujitsu/Siemens and SuSE agreement allows the above
partners to deliver an encompassing enterprise Linux solution to thousands
of potential customers.
<P> SuSE will disperse a free distribution CD within the June 2000 issue of
MacTech Magazine.
This CD will be a fully working distribution of Linux on the 2.2.14 kernel,
with SuSE's powerful installation tool as well as other open-source
software. This CD does not expire and can be distributed freely.
<P> SAN MATEO, CA and HANNOVER, GERMANY - March 14, 2000 - SuSE will now budle
Enlighten Software Solutions, Inc.'s Linux System Monitoring and Reporting
technology with the SuSE Linux 6.4 for Intel distribution. When enabled, the
Enlighten Linux Monitoring Agent will be able to monitor and report on critical
Linux system and operating conditions including processor, memory utilization,
changes in hardware and software configuration and increases in network errors.
<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">Upcoming conferences & events
</FONT>
</H3>
<P>
<table cellpadding=10 border=3 width=100%>
<tr>
<td valign=top>
<b>Forum of Free Software</b><BR>
<td valign=top>
May 4-5, 2000<BR>
Porto Alegre, RS, Brazil<BR>
English: <A HREF="http://www.softwarelivre.rs.gov.br/welc_ing.html" target=_blank>
http://www.softwarelivre.rs.gov.br/welc_ing.html</A><BR>
Portuguese: <A HREF="http://www.softwarelivre.rs.gov.br/welc_port.html" target=_blank>
http://www.softwarelivre.rs.gov.br/welc_port.html</A><BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>HPC Linux 2000</b>: Workshop on High-Performance Computing with
Linux Platforms<BR>
<td valign=top>
May 14-17, 2000<BR>
Beijing, China<BR>
<A
HREF="http://www.csis.hku.hk/~clwang/HPCLinux2000.html" target=_blank>
www.csis.hku.hk/~clwang/HPCLinux2000.html</A>
<P>
(In conjunction with <A
HREF="http://www.cs.wm.edu/hpcs/HPCAsia2000.html/" target=_blank>
HPC-ASIA 2000</A>:
The Fourth International Conference/Exhibition on
High Performance Computing in Asia-Pacific Region)
<P>
</td></tr>
<tr>
<td valign=top>
<b>Linux Canada</b><BR>
<td valign=top>
May 15-18, 2000<BR>
Toronto, Canada<BR>
<A HREF="http://www.linuxcanadaexpo.com" target=_blank>www.linuxcanadaexpo.com</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>Converge 2000</b><BR>
<td valign=top>
May 17-18, 2000<BR>
Alberta, Canada<BR>
<A HREF="http://www.converge2000.com" target=_blank>www.converge2000.com</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>SANE 2000</b>: 2nd International SANE (System Administration and
Networking)
Conference<BR>
<td valign=top>
May 22-25, 2000<BR>
MECC, Maastricht, The Netherlands<BR>
<A HREF="http://www.nluug.nl/events/sane2000/index.html" target=_blank>
www.nluug.nl/events/sane2000/index.html</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>ISPCON</b><BR>
<td valign=top>
May 23-25, 2000<BR>
Orlando, FL<BR>
<A HREF="http://www.ispcon.internet.com" target=_blank>www.ispcon.internet.com</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>Strictly Business Expo</b><BR>
<td valign=top>
June 7-9, 2000<BR>
Minneapolis, MN<BR>
<A HREF="http://www.strictly-business.net" target=_blank>www.strictly-business.com</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>USENIX</b><BR>
<td valign=top>
June 19-23, 2000<BR>
San Diego, CA<BR>
<A HREF="http://www.usenix.org/events/usenix2000/" target=_blank>www.usenix.org/events/usenix2000/</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>LinuxFest</b><BR>
<td valign=top>
June 20-24, 2000<BR>
Kansas City, KS<BR>
<A HREF="http://www.linuxfest.com" target=_blank>www.linuxfest.com</A><BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>PC Expo</b><BR>
<td valign=top>
June 27-29, 2000<BR>
New York, NY<BR>
<A HREF="http://www.pcexpo.com" target=_blank>www.pcexpo.com</A><BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>LinuxConference</b><BR>
<td valign=top>
June 27-28, 2000<BR>
Zürich, Switzerland<BR>
<A HREF="http://www.linux-conference.ch" target=_blank>www.linux-conference.ch</A><BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>"Libre" Software Meeting #1<BR> (Rencontres mondiales du logiciels
libre)</b>, sponsored by ABUL (Linux Users Bordeaux Association)<BR>
<td valign=top>
July 5-9, 2000<BR>
Bordeaux, France<BR>
French: <A HREF="http://www.abul.org/rmll1-fr.html" target=_blank>
www.abul.org/rmll1-fr.html</A><BR>
English: <A HREF="http://www.abul.org/rmll1-uk.html" target=_blank>
www.abul.org/rmll1-uk.html</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>Summer COMDEX</b><BR>
<td valign=top>
July 12-14, 2000<BR>
Toronto, Canada<BR>
<A HREF="http://www.zdevents.com/comdex/" target=_blank>www.zdevents.com/comdex</A><BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>O'Reilly/2000 Open Source Software Convention</b><BR>
<td valign=top>
July 17-20, 2000<BR>
Monterey, CA<BR>
<A
HREF="http://conferences.oreilly.com/convention2000.html" target=_blank>
conferences.oreilly.com/convention2000.html</A><BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>Atlanta Linux Showcase</b><BR>
<td valign=top>
October 10-14, 2000<BR>
Atlanta, GA<BR>
<A HREF="http://www.linuxshowcase.org" target=_blank>www.linuxshowcase.org</A><BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>Web 2000</b><BR>
<td valign=top>
November 1-3, 2000<BR>
(Location unknown at present)<BR>
(URL unknown at present)<BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>Fall COMDEX</b><BR>
<td valign=top>
November 13-17, 2000<BR>
Las Vegas, NV<BR>
<A HREF="http://www.comdex.com" target=_blank>www.zdevents.com/comdex</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>USENIX Winter - LISA 2000</b><BR>
<td valign=top>
December 3-8, 2000<BR>
New Orleans, LA<BR>
<A HREF="http://www.usenix.org" target=_blank>www.usenix.org</A>
<P>
</td></tr>
<tr>
<td valign=top>
<b>Linux Expo</b><BR>
<td valign=top>
(Dates unknown at present)<BR>
San Jose, CA<BR>
(URL unknown at present)<BR>
<P>
</td></tr>
<tr>
<td valign=top>
<b>ISPCON</b><BR>
<td valign=top>
(Dates unknown at present)<BR>
San Jose, CA<BR>
<A HREF="http://www.ispcon.internet.com" target=_blank>www.ispcon.internet.com</A><BR>
<P>
</td></tr>
</table>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Magic Software news
</FONT>
</H3>
<BLOCKQUOTE> <EM>
[Magic Software sent in these beautiful penguin photos from Antarctica.
<P>
<CENTER>
<IMG ALT="Diving Penguins" SRC="gx/bytes/magic/Diving_Penguins.jpg"
WIDTH="418" HEIGHT="280">
<IMG ALT="Sea of Penguins" SRC="gx/bytes/magic/Sea_of_Penguins.jpg"
WIDTH="418" HEIGHT="281">
</CENTER>
<P> The pictures were taken when Mike McMillin won the Magic for Linux Really
Cool Contest and embarked on his prize--an 18-day cruise around Antarctica and
its surrounding islands.
<P> Thanks, Magic! -Ed.]
</EM> </BLOCKQUOTE>
<P> Magic introduced eService, the Company's new Web-based, enterprise-level
customer service management system that allows companies to manage their
service departments as profit centers. The new product, which marks the debut
of Magic's new customer relationship management (CRM) suite, streamlines
service workflow and provides companies a comprehensive picture of their
service departments in real time.
<P> In addition, Magic eService reduces costs by making it possible for
companies to employ cost-effective "virtual support centers," where service
agents can work from their own homes around the world. Virtual support centers
also allow the organization to easily provide 24-hour, seven day a week support
through "follow-the-sun" service that utilizes the availability of the
Internet.
<P> Magic has also signed a deal to deliver MiTAC Europe Ltd. Powered by
Magic's eMerchant, the web site will provide consumers easy access to a wide
range of mall-type stores through a three-dimensional interface that helps
simulate a true store-to-store mall shopping experience for the visitor. It is
a site that MiTAC expects will revolutionize the design and convenience of
online shopping sites. eMerchant is available for Linux.
<P>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">PileofPcs.Org: open-source Beowulf project
</FONT>
</H3>
<P> (STOCKHOLM,SWEDEN) (April 17, 2000) In an effort to address some of the
barriers that are limiting the spread of Beowulf class cluster-based
supercomputer,
<A HREF="http://www.Pileofpcs.Org">Pileofpcs.Org</A> has been created. It is
dedicated to the proliferation of cluster-based supercomputing (i.e. Beowulf
class computers) by creating, promoting and sponsoring the Open Source
development of distributions, applications and tools comparable to those sold
by traditional supercomputer vendors. All three of our initial projects are
being hosted at Sourceforge.net.
<P> "PileofPcs.Org hopes to hasten the day that clusters of cheap computers
become more useful. Our intention is to apply all the technology,
resources and volunteers we can to help the growth of cluster-based high
performance computing as fast as it possibly can. Furthermore, the
PileofPcs.Org is imbedded and wedded to the Open-Source Philosophy and
community," Dr. Terrence E. Brown, Founder/Executive Director.
<P> We are doing this in a number of ways. First, we are creating a new Linux
distribution (and tools) that will allow anyone to easily create a general
purpose supercomputer - a Vanilla Beowulf without being a linux programming
expert. Second, given that a supercomputer is worthless unless it does
something; therefore, perhaps more importantly, we are also, sponsoring the
development of wide range of useful applications both parallel and
parametric. Additionally, one of the biggest problem with deploying
scalable production-class superclusters is the lack of mature and tested
management tools comparable to what the traditional supercomputer vendors
provide. PilesofPcs.Org aims to change this as well.
<P> Current Projects
1. A new linux distribution that will allow those with limited technical
knowledge create a vanilla Beowulf class supercomputer. SuperClustor Linux
is hosted here.
<A HREF="http://sourceforge.net/project/?group_id=4302">http://sourceforge.net/project/?group_id=4302</A>
<P> 2. An Open source version of an base application that would delivers the
high level of performance required for parametric executions by
distributing the jobs over a computer cluster and/or network. This
application will allow users of cluster systems to using already existing
programs with little of no rewriting. Commercial products that do similar
tasks include Clustor and EnFuzion. This would be an open source
alternative to them. OpenClustor is hosted here.
http://sourceforge.net/project/?group_idC03
<P> 3. An open source version of a base application that would enable users
with no particular knowledge in Linux, to setup, configure and manage a
linux cluster. With ease of use so that simple click is enough to add or
remove nodes, monitor processors loads and temperatures. Users will no
longer be required to anymore to allocate specific resources to build and
maintain their cluster supercomputer. A commercial product of this nature
include Alinka's Raisin. SuperCluster Manager is hosted here.
<A HREF="http://sourceforge.net/project/?group_id=4304">http://sourceforge.net/project/?group_id=4304</A>
<P> PileofPcs.Org is looking to support and encourage the development many
other application and/or tool projects including two special types: those
requiring parallelization and those supporting parametric execution. We
want to spur the development applications for all types of situations
including, but not limited to science, finance, multimedia, bioinformatics,
statistics, weather, data mining, design, neural networks, modelling, etc.
<P> 1. Parallelized applications - Although efficient parallelization is a
property of the specific beowulf computer, we believe that we can promote
the creation of pre-parallelized applications. While this will be a
challenge, creating a repository for pre-parallelized and parallelized code
with help speed the development of useable applications for all.
<P> 2. Applications that support parametric execution - Parametric executions
require that the same application is executed numerous times. A single
application is run under a wide range of input conditions and the results
of these different runs are collected together. Parametric executions are
ideally suited to run on large computing clusters, since they produce a lot
of jobs, often exceeding thousands. These applications will allow users to
tap power of distributed computing.
<P> PileofPcs.Org is looking for Project leaders, developers, html designers,
and all others interested in the PileofPcs.Org and Open Source movement.
PileofPcs.Org is also looking for software and hardware sponsors to
facilitate the rapid development and deployment of our efforts.
<P> Contact: Dr. Terrence E. Brown<BR>
<A HREF="mailto:drbrown@pileofpcs.org">drbrown@pileofpcs.org</A><BR>
<A HREF="http://www.PileofPcs.Org">www.PileofPcs.Org</A><BR>
+46 8 790 6174
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Seagate Partners with cobalt Networks
</FONT>
</H3>
<P> SCOTTS VALLEY, CA and MOUNTAIN VIEW, CA - April 3, 2000 - Seagate
Technology, Inc., announced
the first of a suite of Linux-based server appliances targeted at Internet
and Application Service Providers (ISPs and ASPs), through a strategic
partnership with Cobalt Networks, Inc. The first Seagate
Server Appliance Solution, scheduled to be available this summer, is an
easy-to-use, cost-effective solution that provides scablable storage and
reliable data protection for ISPs and ASPs. The Seagate Server Appliance
Solution enables ISPs and ASPs to generate incremental revenue through
"vending" storage and data protection applications to their small and
medium-sized customers.
<P>
<A HREF="http://www.seagate.com">http://www.seagate.com</A><BR>
<A HREF="http://www.cobalt.com">http://www.cobalt.com</A><BR>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Agate HotData Shuttle
</FONT>
</H3>
<P> FREMONT, Calif., March 30 -- Agate Technologies, Inc. today announced the
release of its popular HotData Shuttle(TM) hot swap IDE Plug & Play
solution, designed to support the Linux operating system on Intel based
workstations and Internet Server Appliances.
<P> IDE hot swap is an industry term used to describe technology, which allows
a component of a computer, such as a hard drive, to be attached or detached
physically and electrically without impeding the performance and state of the
computer. Agate provides this hot swap data-transfer capability by integrating
its proprietary ASCII HotChip(TM) with an interface Printed Circuit Board (PCB)
mounted in a generic device bay. The end result is the only true hot swap
solution available today.
<P> Priced at $49.95 (U.S.), HotData Shuttle for Linux comes with Shuttle
bay/Tray, software driver, and mounting kit. HotData Shuttle(TM) for Linux will
be marketed and distributed through its fully owned subsidiary, ei Corporation.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Penguin power credited for 100.000% network availability
</FONT>
</H3>
<P> NORTH QUINCY, MASS: Wednesday, April 5, 2000: Jeff Morris, President of the
Xensei Corporation
(<A HREF="http://www.xensei.com">http://www.xensei.com</A>), announced today
that they have reached a service level milestone that will allow them to begin
rolling out high-availability web hosting, an emerging service level that has
now become business-critical for eCommerce. High-availability hosting is
required by successful eCommerce sites to ensure that their site will be "up",
or open for business for a pre-determined percentage of time-often guaranteed
in a service-level agreement (SLA).
<P> He commented that, "Our customers have certainly appreciated the increased
reliability of our hosting service as network availability has increased to
99.982% over the past year, and 100.000% over the last 90 days."
<P> There are multiple grades of high-availability hosting-they are named
according to the number of "nines" in the uptime percentage. 90% is one nine or
Class I, 99% is two nines or Class II, 99.9% is three nines or Class III, and
so on. Class V is 99.999% and means that the site is down only 5 minutes per
year as opposed to a Class 1 which means that your site is down for 876 hours
per year (or 73 hours per month). Most hosting providers are currently
providing Class I or lower hosting. Few offer the guarantee of an SLA.
<P> Class 1 hosting is most appropriate for companies interested in maintaining
an Internet presence that is informative in nature. Class II hosting is
recommended for companies who are outsourcing their e-mail system or doing
P.O.S. retailing over the Internet. Class IV hosting is required by companies
involved in Manufacturing, Utilities, Telecommunications Customer Service, or
whose business is strictly eCommerce. Class V hosting is business critical to
health systems, satellite navigation, reservation systems, banking (EFT and ATM
transactions) and financial securities trading. Class VI (99.9999%) hosting is
used by defense systems in launch readiness.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">LinuxMall news
</FONT>
</H3>
<P> DENVER - The first Linux product orders from LinuxMall.com's
<A HREF="http://www.linuxmall.com">web site</A> are
being filled through Frank Kasper & Associates' Minneapolis, Minn.
warehouse. The fulfillment operation is a key component of the recently
announced merger between LinuxMall.com and Frank Kasper & Associates.
<P> LinuxMall sponsored all four Linux Business Expo Community Hubs. Linux
Community Hubs provide free booth space to non-profit organizations that make
significant contributions to the Linux and Open Source movement.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Tux and DustPuppy (Linux Mall)
</FONT>
</H3>
<P> DENVER - Tux the penguin and Dust Puppy, the hottest celebrities in the
IT technical community, have announced their partnership agreement. Geeks from
around the Internet are gathering to support the cuddly mascots in the joint
venture.
The partnership between Tux, the Linux mascot and User Friendly's Dust
Puppy clears the way for a cross-marketing agreement between LinuxMall.com and
<A HREF="http://Userfriendly.org">Userfriendly.org</A>.
<P> "I'm thrilled about the Little Guy and my new friends at User Friendly," said Tux in response to the agreement. "My favorite thing to do after eating a few gallons of raw herring, is to curl up with Dust Puppy and the cast of User Friendly. Now I'll get some laughs first-hand."
<P> "Tux and the whole Linux community are way-cool," the Canadian Dust Puppy remarked. "I'm looking forward to some major appearances together in the future."
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Linux Expo North America (review)
</FONT>
</H3>
<P> Montreal, April 18, 2000 - The first ever Linux Expo North America was a
marked success. Close to 4,500 visitors made their way through the snow storm
to attend the Expo at Palais des Congrs. The slight shortfall in the number of
visitors due to Mother Nature's whimsy was more than made up for in the
discernible quality of visitors. The success of this first edition set the tone
for future shows in Toronto in October and in Montreal in April 2001.
<P> "The comments we've received from the majority of our 102 exhibitors confirm
that our choice of quality versus quantity of visitors, was indeed the best
strategy for positioning our event as one of the great shows in the Linux North
America circuit" declared Stphane Labrouche, V.P. and Director General of Sky
Events, show organizers.
<P> Linux Expo North America is already scheduled to take place in Montreal from
April 10 to 12, 2001. In the meantime, the event will be held in Sao Paulo June
20 and 21, 2000 and at Toronto's Metro Convention Center October 30, 31 and
November 1, 2000.
<P> <A HREF="http://www.linuxexpocanada.com">www.linuxexpocanada.com</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Hewlett-Packard to bundle TapeWare Linux software its
tape drives
</FONT>
</H3>
<P> FRESNO, CA., February 14 ( Yosemite Technologies, Inc. today announced an
agreement with Hewlett-Packard Company to bundle Yosemite's storage management
software, TapeWare, with the HP SureStore family of DAT, and DLT tape drives.
<P> HP gains a powerful, comprehensive, yet intuitive backup technology that
has been often rated superior to other industry leading backup applications and
the bundled solution will provide additional support for the innovative new HP
One-Button Disaster Recovery (OBDR) feature, for integrated full-system
restoration. HP's OBDR offers a fast, simple solution to return a server or
desktop system to its normal operational state following a crash.
<P> "Introducing TapeWare into HP SureStore products offers a complete backup
solution and One-Button Disaster Recovery for Windows NT and NetWare" says
Peter Doughty, marketing manager for HP Computer Peripherals Bristol. "It also
provides HP SureStore customers with the ability to backup Linux servers and
workstations."
<P> <A HREF="http://www.tapeware.com">http://www.tapeware.com</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">NetWinder OfficeServer 1.5
</FONT>
</H3>
<P> OTTAWA, Canada - April 5, 2000 - Rebel.com Inc. announced the availability
of an upgrade to its OfficeServer software - NetWinder OfficeServer 1.5.
<P> NetWinder OfficeServer 1.5 is an all-in-one Internet gateway server
appliance which provides small and medium-sized businesses with full
Internet and local area network support. Based on the Linux operating
system, NetWinder OfficeServer 1.5 is configured with a broad range of
network services such as firewall/VPN, Web site hosting, Web access, file
and printer sharing and e-mail.
<P> Features and enhancements to NetWinder OfficeServer 1.5 include:
<P> * PPPoE (PPP over Ethernet) support - PPPoE is a relatively new protocol that
specifies how a computer interacts with a broadband modem (ie. xDSL, cable,
wireless, etc.) to achieve access to the growing number of highspeed data
networks;
<P> * Third-party plug-in to allow developers to add applications independently
to the OfficeServer;
<P> * Dynamic Host Configuration Protocol (DHCP) client has been upgraded to
support the @home cable modem service.
<P> The security features of the OfficeServer have been significantly enhanced
in order to keep pace with industry-standard security criteria. This
includes more secure default firewall rules and increased privacy protection
in the mail server. In addition, NetWinder OfficeServer 1.5 now allows users
to securely connect to their OfficeServer-protected LAN anywhere in the
world using the Virtual Private Network (VPN) software. The VPN software is
bundled with the OfficeServer at no additional charge and includes 3 free
client licenses.
<A HREF="http://shop.rebel.com/netwinder/officeserver.cfm">
http://shop.rebel.com/netwinder/officeserver.cfm</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Cobalt RaQ3i Systems and Phoenix Adaptive Firewall
</H3></H3> <!-- Netscape shouldn't need the extra </H3>, but for some
reason it does. -->
<P> COLUMBUS, OH, (April 11, 2000) Progressive Systems, Inc., has implemented
its Phoenix Adaptive Firewall onto Cobalt Networks' platform. Designed for the
many small and medium sized businesses (SMBs) that are implementing full-time
Internet access but have growing security concerns, the new firewall appliance
can be quickly installed and configured to provide very effective protection
that is transparent to the network. This new implementation joins
Progressive's existing firewall appliance based on the Cobalt Qube and Cobalt
RaQ server appliances.
<P> The fully featured product will sell for $4495 for unlimited users.
<P> <A HREF="http://www.progressive-systems.com">
http://www.progressive-systems.com</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Cobalt Networks Named As Worldwide Market Share Leader
</FONT>
</H3>
<P> Mountain View, Calif., April 24, 2000- Cobalt Networks, Inc.
announced today that it was named as the worldwide leader in unit market
share for server appliances in the 1999 Server Appliance report published by
Dataquest on April 3, 2000. The Dataquest report names Cobalt as the unit
share leader for the total market, as well as for the entry-level and
midrange market segments.
<P> Server appliances are application-specific devices. Cobalt's products are
affordable, easy to use, and designed to support one or a few applications
well. Cobalt's product line includes server appliances focused on Web and
e-commerce hosting, e-mail, firewall, caching, and many other Internet-based
applications. In addition, the Cobalt Developer's Network, launched in the
first quarter of 2000, has attracted over 600 application developers to the
Cobalt server appliance platform.
<P> <A HREF="http://www.cobalt.com">http://www.cobalt.com</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">The World's First SANappliance hits the street
</FONT>
</H3>
<P> SPRING INTERNET WORLD -- Apr. 5, 2000 -- DataDirect Networks, Inc., a
leader in SAN network infrastructure solutions, today is releasing the SAN
DataDirector, the world's first storage area network (SAN) appliance. The SAN
DataDirector is an intelligent network infrastructure device incorporating the
functionality of next generation SANs into a single integrated, reliable, plug
and play appliance that makes it easier to build and manage a SAN.
<P> The SAN DataDirector allows UNIX,
Linux, clustered Linux, Sun, SGI, AIX, Mac and Windows NT servers and
workstations to access shared storage resources, permitting workgroups and
clusters within a heterogeneous computing environment with incompatible
operating systems to simultaneously share storage resources. The SAN
DataDirector easily plugs into existing servers and storage, increasing their
capabilities while providing investment protection. This capability enables
data access between SAN and client-server users bridging the SAN and NAS
environments, while also upgrading legacy storage into intelligent storage
resources.
<P> <A HREF="http://www.datadirectnet.com">www.datadirectnet.com</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Technical Manager Wanted - NetJammer.com
</FONT>
</H3>
<P> <A HREF="http://www.netjammer.com/">netjammer.com</A>
is looking for a Linux-capable webmaster that could
handle the administrative / webmaster / maintenance side of the site.
<P> It's a very uncorporate "musician" and internet environment.
<P> The Technical Manager's desired skills include all aspects of server
administration and webmastering, HTML, Javascript, Perl, rich media
(audio/video) development and delivery, writing ad copy, tech support, etc.
<P> Pay is negotiable.
Company is located in Hollywood.
<P> PLEASE CONTACT:
Chapin Hemphill at <A HREF="mailto:jobs@netjammer.com">jobs@netjammer.com</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Linux Links
</FONT>
</H3>
<P> LinuxDevices.com articles re embedded systems:
<UL>
<LI> <A HREF="http://linuxdevices.com/cgi-bin/article_view.cgi?artid=AT7901775675">
Linux and Windows square off over devices</A> and why Linux will win.
<LI> <A HREF="http://www.linuxdevices.com/cgi-bin/news_view.cgi?newsid=NS8757266703">
Embedded Linux Consortium launched</A>
</UL>
<P> <A HREF="http://www.team-linux.com">TeamLinux</A> is a professional
services organization that provides customers completely integrated solutions
enabled by open source / Linux technology. TeamLinux offers
consulting, design, integration, migration, training and support services
for many business applications, including: e-commerce, Internet-enabled
business- to-business, Computer Aided Design (CAD), Electronic Design
Automation (EDA), embedded systems and Internet appliance applications.
<P> <A HREF="http://userlocal.com">http://userlocal.com</A> is a site with
information for new Linux users. (from comp.os.linux.announce)
<P> <A HREF="http://www.linuxnetworx.com">Linux NetworX</A> offers a
reliable and cost-effective clustering alternative to the "super computer" for
organizations demanding high performance and extremely low failure rates.
<a name="software"></a>
<P> <hr> <P>
<!-- =================================================================== -->
<center><H3><font color="green">Software Announcements</font></H3></center>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">OpenAL: a 3D audio library
</FONT>
</H3>
<P> San Jose, CA. -- March 8, 2000 -- Loki Entertainment Software, the
leading publisher of commercial games for the Linux operating system,
announced a multi-company project to create and distribute OpenAL,
an open-source, cross-platform 3D-Audio library.
<P> 3D-Audio greatly improves the immersive quality of a game. It allows
games and other applications to take advantage of powerful spacialized
sound effects, including distance and direction attenuation, panning and
reverb. With these features, gamers can, for example, determine by sound
the distance and direction of an explosion in a 3D-gaming environment.
<P> "OpenAL represents a milestone for Linux and for the game industry in
general," said Scott Draeker, president, Loki Entertainment Software.
"Until now, games running on Linux have not had access to the advanced
3D-Audio features available on other platforms. OpenAL provides those
advanced features with an open-source, nonproprietary implementation
which is available not just for Linux, but for Windows and MacOS games as
well. What SGI's OpenGL has done for 3D-Video, OpenAL will do for
3D-Audio."
<P> Creative Technology,
plans to release Linux drivers that will work with OpenAL, and which
natively support the advanced 3D-Audio effects which OpenAL enables. In
addition, Creative is evaluating MacOS and Windows implementations of the
OpenAL standard
<P> Loki is already incorporating OpenAL into its growing product line of
AAA Linux games. In March, Loki will release the Linux version of
Activision's Heavy Gear II, the first Linux game to support 3D-Audio
using OpenAL.
<P> The source code for OpenAL for Mac, Windows and Linux is freely available
for download and is offered under the GNU Library Public License (LGPL).
Visit <A HREF="http://www.openal.org">www.openal.org</A> for more information.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Joydesk
</FONT>
</H3>
<P> Seattle, Washington--March 3, 2000--
Virtualtek/<A HREF="http://Joydesk.com">Joydesk.com</A> announces the release
of the wireless version of the popular Joydesk software for March 15, 2000.
The software enables users to access all the functionality of their web-based
collaboration applications from the minibrowser of their Internet ready
cellular phone.
<P> Joydesk is a fully featured information management suite of
applications with its own built-in mail server. Users can send or receive
e-mail, check their schedule, access contact information, manage tasks, share
information or receive urgent e-mail notification from the web at anytime, from
any location and through any browser, web-enabled PDA, and now, from any
Internet ready phone.
<P> A free 30 day trial version is available for
download.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Rogue Wave C++ Toolkit
</FONT>
</H3>
<P> BOULDER, CO - April 10, 2000 - Rogue Wave Software announced the release of
its comprehensive collection of C++ components for Linux. The C++ Toolkit for
Linux enables developers to easily create applications on the Linux platform.
<P> This special edition Linux-Only CD includes ports of Rogue Wave's most
popular cross-platform C++ products to the Linux platform, including
Standard C++ Library, Tools.h++, Threads.h++, Tools.h++ Professional,
DBTools.h++ and Money.h++. This new offering provides Linux developers with
basic data structures, threading classes, classes for accessing relational
databases and classes for business analysis and currency conversion.
<P> Pricing starts at $545 and includes a license and one year of Silver
Technical Support and product updates.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">TopPage
</FONT>
</H3>
<P> IBM has recently developed a WYSIWYG HTML editor for
Linux (beta) TopPage is an award-winning
WYSIWYG HTML editor which allows you to create dazzling Web pages in minutes
without any HTML knowledge or programming skills. It is suitable for beginners
and experts. It includes all the tools necessary to create Web pages, including
a WebArt Designer which lets you create logos and buttons, and a Web Animator
which lets you create animation GIF files with just a few simple steps. The
program includes up-to-date technology -- such as Cascading Style Sheets, Java
applets and Dynamic HTML. TopPage gives you the capability to build lively pages
with state-of-the-art Web technology. TopPage brings together everything you
need to build pages and publish your site in one package. Now the Linux version
(beta) is available. You can download it free from
<A HREF="http://www.ibm.com/jp/toppage/">http://www.ibm.com/jp/toppage/</A>
and use it until December 31, 2000.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">HancomLinux word processor spans Asian and European languages
</FONT>
</H3>
<P>
HancomLinux, Inc., a subsidiary of Haansoft which holds
80% of Korea's word processor market, has completed development of a Linux
version word processor targeted on overseas markets and will kick off on sales
this month.
<P> The
Chinese version "Wenjie" is still undergoing tests for supplying the program to
significant Linux PC corporations and has yet to select distributors. The
Chinese version is divided into two versions; version for users in mainland
China, and version for users in Hong Kong and Taiwan. The general users'
version will also include a Windows version.
<P>
"HancomWord," which has its target on English-speaking
regions, will begin sales immediately after beta testing is completed.
HancomWord is reported to be particularly convenient in that the selection of
various languages, not only English or French, but also languages such as
German, Greek, Russian, Spanish, Japanese and many more is possible without the
nuisance of extra procedures. The company currently hold the beta testing event
by free downloading
(<A HREF="http://www.hancom.com/english">http://www.hancom.com/english</A>) prior to official release.
This new word processor is prospected to surface as a new contestant in the
Linux Office market with its compatibility with HTML, text, and MS Word
documents.
<P>The
Japanese version will be under the name "Are-A Hangul 2000" and will be
exhibited at the Tokyo Linux Convention to be held next
month.
<P>The
successful porting of LinuxHangul from Windows Hangul, which has undergone
continuous improvement for the past 10 years, was made possible by the
successful application of the 'Wine' technology. Wine
is a developing tool which facilitates the use of Windows application programs
in a Linux environment. This project has been openly operated with Linux
programmers from all over the world.
<P> HancomLinux has planned to seek overseas markets through cooperation with
local distributors and is reported to first finish development of programs
including spread sheet, graphics, presentation, etc. and then start seeking new
markets full scale with an competitive Office suite.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Artstream
</FONT>
</H3>
<P> A new release of Artstream, version 2.0b11-3, has now been posted. This
version has several enhancements and fixes.
<P> All the patches needed for the Mesa library are now including in the
Mesa developer distribution of version 3.2 and later at
<A HREF="http://mesa3d.sourceforge.net/devel.html#branches">
http://mesa3d.sourceforge.net/devel.html#branches</A>. This version will
soon become the official release. If desired an rpm of this release is
still available from the Mediascape site.
<P> Both the new Artstream and the Mesa rpms are available at:
<A HREF="http://www.mediascape.com/linuxrpm.html">
http://www.mediascape.com/linuxrpm.html</A>
<P> Documentation remains at:
<A HREF="http://www.mediascape.com/mediaEscape/guide.html">
http://www.mediascape.com/mediaEscape/guide.html</A>
<P> In this release some text functionality is still omitted until we
complete our licensing of certain spelling and hyphenation dictionaries
for Linux. However all illustration tools should be intact.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Corel news
</FONT>
</H3>
<P> Ottawa, Canada - April 11, 2000 - CorelDRAW 9 for Linux will be available
in July, two months earlier than scheduled. In addition, Corel VENTURA
Publisher 8.5 for Linux and Windows will be available by the end of this year
and the free download of Corel PHOTO-PAINT 9 for Linux will be available in
June.
<P> The first beta of CorelDRAW 9 for Linux was sent to beta sites April 7.
<P> Ottawa, Ontario - March 10, 2000 - Corel Corporation today announced it
will offer a free download of Corel PHOTO-PAINT 9 for Linux. The download
version of Corel PHOTO-PAINT 9 for Linux, Corel's photo-editing, image
composition and painting application, will be available in early summer.
<P> A retail version of CorelDRAW 9 Graphics Suite for Linux which includes
Corel PHOTO-PAINT 9 will ship late summer 2000 with comparable pricing
to the Windows version of this product.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Helix GNOME
</FONT>
</H3>
<P> Cambridge, MA - March 6, 2000 - Helix Code, Inc. today unveiled a preview
version of its Helix GNOME desktop -- a collection of more than 80
industry-leading software applications designed to meet every need of the
Linux user.
<P> "As open source software, GNOME is a significant step forward
technologically; we have effectively leap-frogged the legacy problems which
are keeping software development in a state of little progress. Innovation
will finally be brought back to software. And the Helix
GNOME desktop means that all of this is available to end-users with very
little effort," said Miguel de Icaza, co-founder of Helix Code, who recently
was named as one of the "50 Leaders of the New Millennium" by Time Magazine
and CNN.
<P> For more information about Helix GNOME, and to download the preview release
version of the Helix GNOME desktop, visit the Helix Code, Inc. website at
<A HREF="http://www.helixcode.com">www.helixcode.com</A>.
<P> Helix Code Inc. is an open source software company that produces
high-quality productivity applications under the terms of the GNU GPL.
Helix Code, Inc., is devoted to improving GNOME, the leading desktop
environment for Linux.
<BLOCKQUOTE> <EM>
[An <A HREF="correa1.html">interview with Miguel de Icaza</A> is in this
issue of <EM>Linux Gazette</EM>. -Ed.]
</EM> </BLOCKQUOTE>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Exile III: Ruined World
</FONT>
</H3>
<P> Spiderweb Software and Boutell.com proudly present Exile III: Ruined World!
Exile III: Ruined World is an epic fantasy role-playing game for Linux,
featuring a fascinating plot, detailed and enormous world, and an elegant
game system and interface.
<P> What makes Exile III exceptional? Well, it features ...
<UL>
<LI> Involving, intricate plot, with 200000 words of story!
<LI> An enormous, changing world. Do nothing, and things evolve around you.
Refugees move from town to town. Villages will be destroyed. Characters will
die. Monsters will gain territory.
<LI> Detailed, open ended system. Don't want to go on adventures? Do odd jobs.
Save up and buy a house. Go on one of dozens of side missions. Explore an
enormous outdoors with well over a hundred dungeons and towns. Just go
through people's houses and rummage through their stuff!
<LI> Pleasing, professionally done graphics and sound.
<LI> Carefully designed interface, with comprehensive online help, adventure
journals, and design with an eye towards enabling you to do everything with
the minimum amount of fuss.
</UL>
<P> <A HREF="http://www.spiderwebsoftware.com/exile3/linuxexile3.html">
http://www.spiderwebsoftware.com/exile3/linuxexile3.html</A>
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Tripp Lite's UPS gets Red Hat
</FONT>
</H3>
<P> Chicago, IL (April 13, 2000)-Tripp Lite, a manufacturer of power
protection products, has established another milestone in its support for the
Linux development community. Tripp Lite's PowerAlert UPS Management Software
has been tested and approved by Red Hat, Inc. to install and run flawlessly
using the Red Hat Linux operating system.
<P> "Receiving Red Hat Ready certification capped a thorough testing process
which proved that both Red Hat and Tripp Lite are dedicated to providing Linux
users with the most comprehensive power protection solutions available," said
Mike DelGrosso, Tripp Lite's Director of Software Development. "Although other
UPS software has been tested by Red Hat, Tripp Lite is the only UPS
manufacturer that provides Red Hat's customers with a complete UPS software
source code. This allows developers to customize not only basic UPS shutdown
functions, but the full range of intelligent UPS control as well."
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">JavaServer pages book (alternative to CGI)
</FONT>
</H3>
<P> Greenwich, CT -- Web Development with JavaServer Pages, by Duane
K. Fields and Mark A. Kolb, is the the first book to
systematically cover everything a developer needs to know to
create effective web pages and web-based applications with JSP.
<P> Unlike older technologies such as ASP and CGI scripts, JSP
provides full access to all the Java APIs, enabling a web
developer to tap the power of one of the largest and most refined
libraries of reusable code in existence--and all within the
simple, familiar HTML format. But until now, web developers had
few places to turn to learn how to take full advantage of this
new technology.
<P> Web Development with JavaServer Pages covers the entire JSP
development process from start to end, from an enterprise
perspective.
<P>
<A HREF="http://www.manning.com/Fields/Contents.html">Contents</A><BR>
<A HREF="http://www.manning.com/Fields/Chapters.html">Chapters 1 and 6</A>
(PDF format)
<P> The book is also available electronically (14 MB PDF file), in color
and searchable, for $13.50 (70% less than the hard copy price). The cost is
applicable to the on-line purchase of the printed book later.
<P> <hr> <P>
<!-- =================================================================== -->
<H3><IMG ALT=" " SRC="../gx/bolt.gif">
<FONT COLOR="green">Other software
</FONT>
</H3>
<P> <A HREF="http://www.software-carpentry.com/entries/index.html">
First-round entries in the Software Carpentry design competition</A>
<P> <A HREF="http://www.changingpages.com/">ChangingPages</A> 3.0 is a web
authoring tool released under the GNU Public License. It requires Perl 5 and
MySQL. (Psand)
<P> <A HREF="http://www.comuno.com/linux/leafwa/screen/leafwa.phtml">Leafwa</A>
is a web-based administration program for Leafnode, a small nntp news server.
<P> <A HREF="http://www.easysw.com">Easy Software Products</A>'s ESP Print Pro
v4.0.4 is a complete printing solution for UNIX. It prints PostScript, PDF,
GIF, TIFF, PNG, JPEG, SGI RGB, etc, to over 1600 printers via serial, parallel
and network.
<P> <A HREF="http://www.zend.com">Zend Optimizer for PHP 4.0</A> betas 1 and 2
are available for download.
<P> <A HREF="http://www.ihtmlmerchant.com">iHTML Merchant</A> e-commerce
transaction service "now offers more payment processors than any of their
competitors" according to their press release. (Inline Internet Systems, Inc.)
<BLOCKQUOTE> <EM>
[Note to Inline: Linux does not have a stock symbol! "LNUX" refers
to only <STRONG>one</STRONG> Linux-using company among many.. -Ed.]
</EM> </BLOCKQUOTE>
<P> <A HREF="http://www.elsop.com/">LinkScan</A> Enterprise & Enhancements
7.0 is a scalable, industrial-strength tool for doing link checking, HTML
validation, web site management and creating site maps. Three other
mutually-comptatible LinkScan products are available for workstations and
servers. (Electronic Software Publishing Corporation (Elsop))
<P> Axis Communications has open-sourced its Linux drivers for Bluetooth, a
technology for wireless communications between mobile phones and other portable
devices. Axis also produces a Journaled Flash File System (JFFS) for
Flash-ROM's. Axis has also released a Linux-based Axis 2100
Network Camera. It does not require a PC; it connects directly to the
network and is controlled from a web browser.
<A HREF="http://developer.axis.com">http://developer.axis.com</A>
<P> <A HREF="">iServer</A>is a platform-independent application/web server
written entirely in Java. 90-day free preview at
<A HREF="http://www.servertec.com">http://www.servertec.com</A>. (Servertec)
<P> Aladdin Expander beta uncompresses/decodes files from a variety of Unix,
Windows and Macintosh formats. Linux/Intel version is available at
<A HREF="http://www.aladdinsys.com/expander/expander_linux_login.html">
http://www.aladdinsys.com/expander/expander_linux_login.html</A>.
Linux/Macintosh version is expected soon.
<P> <A HREF="">Voodoo3 3D graphics-card drivers</A> are available from
<A HREF="http://www.xig.com">http://www.xig.com</A> for US$29.
<P> <A HREF="http://www.aestiva.com">Aestiva</A>
1.8 is a web-based operating system now with
improved scalability, including the ability for dynamic sites to operate across
multiple servers (called "server-jumping").
<P> <a href="http://www.chilisoft.com">Chili!Soft Active Server
Pages</A> for Linux. Also available preinstalled on Cobalt's RaQ 3 server
appliance.
<P> <A HREF="">NetLedger</A> is a web-based accounting solution for small
businesses. Its new Data Center represents the largest deployment of Linux on
Oracle worldwide.
<P> <A HREF="http://www.ActiveState.com">Active Perl</A> 5.6 is a binary
distribution of Perl for Linux, Windows and Solaris that is faster to install,
includes a Perl Package Manager (PPM) for installing modules, and runs up to
48x quicker than the standard Perl. (ActiveState)
<P> <A HREF="http://www.parasoft.com">Parasoft</A> has three programs that
run on Linux. SiteRuler detects HTML files for bad links, spelling errors,
orphaned files, and non-standard HTML. CodeWizard checks C/C++ programs for
coding-standard violations. Insure++ is an automatic runtime error detection
tool for C/C++.
<P> <A HREF="http://www.micronetics.net">SecureNet PRO</A> 3.0 is an
enterprise-scalable network monitoring and intrusion detection platform.
(MimeStar, Inc.; MicroNetics, Inc.)
<P> <A HREF="http://www.omnis.net">Omnis Studio</A> 2.4 makes learning 4GL and
OO easier. A demonstration copy can be downloaded from the web site.
(Omnis Software)
<P> <A HREF="http://www.enhydra.org">Enhydra</A>, an open-source Java/XML
application server has been selected to power <A
HREF="http://AnywhereYouGo.com">AnywhereYouGo.com</A>, a community site for
wireless Internet developers and IT managers. (Lutris Technologies, Inc.)
<P> <A HREF="">Vividata, Inc.</A> has reduced the prices of its OCR Shop,
ScanShop and PostShop scanning and printing software for personal and
non-profit users.
<!-- *** BEGIN copyright *** -->
<P> <hr> <P>
<H5 ALIGN=center>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.
Copyright © 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H3>Contents:</H3>
<dl>
<!-- dt><a href="#tag/greeting"
><img src="../gx/dennis/bbub.gif" alt="(!)" border="0"
align="middle"><strong>Greetings From Jim Dennis</strong></A>
<dd>plus <a href="#tag/hgreeting"
><strong>¶: Greetings From Heather Stern</strong></A></dl -->
<DL>
<!-- index_text begins -->
<dt><A HREF="#tag/1"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>Win4Lin and www.linuxdoc.org/LDP/LG/issue50/tag/26.html --or--
<dd><A HREF="#tag/1"
><strong>Win4Lin eMERGEs</strong></a>
<dt><A HREF="#tag/2"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
><strong>Extracting a block of text from a file</strong></a>
<dt><A HREF="#tag/3"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>Please can you help ? --or--
<dd><A HREF="#tag/3"
><strong>Zipping Across the LAN</strong></a>
<dt><A HREF="#tag/4"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>accessing windows files --or--
<dd><A HREF="#tag/4"
><strong>Accessing Local MS-DOS/Windows '9x Drives/Disks from Linux</strong></a>
<dt><A HREF="#tag/5"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>co-processes --or--
<dd><A HREF="#tag/5"
><strong>More on >> zsh Co-processes</strong></a>
<dt><A HREF="#tag/6"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>Linux - AMD? --or--
<dd><A HREF="#tag/6"
><strong>Linux for AMD, Cyrix, etc</strong></a>
<dt><A HREF="#tag/7"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>rcp question --or--
<dd><A HREF="#tag/7"
><strong>UNIX User Tries Linux 'rsh'</strong></a>
<dt><A HREF="#tag/8"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
><strong>Telnet</strong></a>
<dt><A HREF="#tag/9"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>unix system admin --or--
<dd><A HREF="#tag/9"
><strong>Getting Familiar with a UNIX System</strong></a>
<dt><A HREF="#tag/10"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>NT OS/2 --or--
<dd><A HREF="#tag/10"
><strong>Connecting NT and OS/2</strong></a>
<dt><A HREF="#tag/11"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>control another VT? --or--
<dd><A HREF="#tag/11"
><strong>"Temporarily Controlling a VT"</strong></a>
<dt><A HREF="#tag/12"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>question regarding adding pty's to my sunos environment --or--
<dd><A HREF="#tag/12"
><strong>Running out of Pseudo-tty's</strong></a>
<dt><A HREF="#tag/13"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>xdm wont start a session --or--
<dd><A HREF="#tag/13"
><strong>XFree 4.0 and ":0.0 refused by server" Errors</strong></a>
<dt><A HREF="#tag/14"
><img src="../gx/dennis/bbub.gif" height="28" width="50"
alt="(!)" border="0"
><strong>FW: Linux</strong></a>
<dt><A HREF="#tag/15"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>Which filesystem? --or--
<dd><A HREF="#tag/15"
><strong>Determining the Type of Each Filesystem</strong></a>
<dt><A HREF="#tag/16"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>4 questions --or--
<dd><A HREF="#tag/16"
><strong>Four Questions</strong></a>
<dt><A HREF="#tag/17"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>Kermit protocol --or--
<dd><A HREF="#tag/17"
><strong>G-Kermit: The GPL Kermit Transfer Package</strong></a>
<dt><A HREF="#tag/18"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>shell cannot see an existing file --or--
<dd><A HREF="#tag/18"
><strong><TT>./script:</TT> No such file or directory</strong></a>
<dt><A HREF="#tag/19"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
><strong>hello</strong></a>
<dt><A HREF="#tag/20"
><img src="../gx/dennis/bbub.gif" height="28" width="50"
alt="(!)" border="0"
></a>Shutting Down the "ping Daemon" --or--
<dd><A HREF="#tag/20"
><strong>Shutting Down the Ping Daemon: Revised</strong></a>
<dt><A HREF="#tag/21"
><img src="../gx/dennis/qbub.gif" height="28" width="50"
alt="(?)" border="0"
></a>run any remote X server at host box --or--
<dd><A HREF="#tag/21"
><strong>Remotely Executing Graphic Apps</strong></a>
<!-- index_text ends -->
</DL>
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<!-- A NAME="tag/greeting"><HR WIDTH="75%" ALIGN="center"></A>
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Greetings from Jim Dennis</H3 -->
<!-- begin greeting -->
<!-- end greeting -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<!-- A NAME="tag/hgreeting"><HR WIDTH="40%" 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 -->
<!-- end hgreeting -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/1"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 1 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Win4Lin eMERGEs</H3>
<p><strong>From J. David Peet on Thu, 30 Mar 2000
</strong></p>
<!-- ::
Win4Lin eMERGEs
~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
I just ran across your article
</STRONG></P>
<P><STRONG>
www.linuxdoc.org/LDP/LG/issue50/tag/26.html
that talks a (tiny) bit about Win4Lin.
</STRONG></P>
<P><STRONG>
FYI, Win4Lin is now available. And if you are interested,
the full documentation is on-line on the TreLOS web site.
www.trelos.com. You can also order it via this web site.
</STRONG></P>
<P><STRONG>
In case you did not know, the Win4Lin technology has a long
history as "Merge" for SCO Unix. SCO has been an OEM of
our Merge technology for years.
Win4Lin is the Linux version of the existing current technology.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I didn't know that. I thought DOS/MERGE was from a
company called "Locus" or something like that.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
One minor point <TT>--</TT> Win4Lin is not a "clone" of VMWare as
such. They both provide a virtual machine to run Windows in on
Linux, but there are significant differences.
Refer to the new "white-paper" document:
<A HREF="http://www.trelos.com/trelos/Trelos/Products/Win4Lin_Whitepaper.htm"
>http://www.trelos.com/trelos/Trelos/Products/Win4Lin_Whitepaper.htm</A>
Near then end are two paragraphs that compare and contrast
Win4Lin <A HREF="http://www.winehq.com/">WINE</A> and VMWare.
</STRONG></P>
<P><STRONG>
-Thanks
<TT>-David</TT> Peet
<A HREF="mailto:david.peet@trelos.com"
>david.peet@trelos.com</A>
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I probably shouldn't have used the word "clone" <TT>---</TT> though
it isn't all that precise. Obviously, in light of Win4Lin's
heritage it might be more appropriate to say that VMWare is a
"clone" of Win4Lin's predecessor. MERGE is the grandaddy of
MS-DOS emulators for UNIX.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, I'll let people make up their own mind based on their
own reading and experience.
</BLOCKQUOTE>
<BLOCKQUOTE>
I haven't actually used any DOS or MS Windows software in years
(only the occasional, blessedly brief trifle to help someone out
here or there). So even if you were to send a copy to me for my
evaluation I can't promise that I'd ever get around to trying
it. (I think I have a VMWare CD around here somewhere <TT>--</TT> an eval
copy or some such). Heather, my editor and wife, still uses
MS-Windows occasionally. I know she's installed <A HREF="http://www.dosemu.org/">DOSEMU</A>, and WINE
and used them a bit (DOSemu extensively). I've installed and
played with DOSemu (helped someone with it at an installfest a
couple weeks ago, too). However, I've never even tried WINE!
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, good luck on you're new release.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 1 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 1 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Win4Lin eMERGEs</H3>
<p><strong>Answered By J. David Peet on Thu, 30 Mar 2000
</strong></p>
<BLOCKQUOTE>
Jim Dennis wrote:
</BLOCKQUOTE>
<!-- ::<BLOCKQuote>
Win4Lin eMERGEs
~~~~~~~~~~~~~~~
</BLOCKQuote>:: -->
<P><STRONG><FONT COLOR="#000066"><EM>
In case you did not know, the Win4Lin technology has a long
history as "Merge" for SCO Unix. SCO has been an OEM of
our Merge technology for years.
Win4Lin is the Linux version of the existing current technology.
</EM></FONT></STRONG></P>
<P><STRONG>
I didn't know that. I thought DOS/MERGE was from a
company called "Locus" or something like that.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Yes, I was there at Locus at the very start of Merge.
It's been a long path since then with some odd twists.
First Locus merged with Platinum, and Merge continued to
be developed, including the current SCO Merge 4 version
with win95 support. Then right before CA digested Platinum,
a company in Santa Cruz, DASCOM, bought (rescued!) the Merge
technology out from Platinum and hired some of us old-time Merge
developers to form a company named "TreLOS" to take the technology
forward including porting it to Linux. (Insert danger music here.)
Then before TreLOS could be spun off as it's own company, IBM bought
DASCOM, for reasons having nothing at all to do with Merge/TreLOS.
Then in February IBM finished spinning TreLOS off as it's own company.
We are currently a (very small) privately held company with NO
affiliation with IBM and NO IBM technology. (IBM for some reasons
wanted that to be clear.) Once we escaped from IBM it took a
bit more than a month to set up the infrastructure to be able to
release the product. It was getting caught up in the IBM acqusition
of DASCOM that prevented us from releasing the product last fall
as we had originally planned.
The Win4Lin 1.0 product has actually been ready for months now.
All that time was not completely wasted because IBM let us have an
extended semi-secret beta program so it's actually been in real use
for quite a while for a "1.0" version product.
</BLOCKQUOTE>
<BLOCKQUOTE>
So that's the history to this point. Perhaps more than you
wanted to know.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
...
Anyway, good luck on your new release.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
-Thanks
-David
</BLOCKQUOTE>
<BLOCKQUOTE>
P.S. Now that we are launching Win4Lin 1.0, having reviews done is
a Good Thing. So if you or Heather would like to do a review of it
that is extremely easy to arrange.
</BLOCKQUOTE>
<!-- end 1 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/2"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 2 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Extracting a block of text from a file</H3>
<p><strong>From Tim Moss on Thu, 30 Mar 2000
</strong></p>
<P><STRONG>
I'm trying to extract a block of text from a file using just bash and
standard shell utilities (no perl, awk, sed, etc). I have a definitive
pattern that can denote the start and end or I can easily get the line
numbers that denote the start and end of the block of text I'm
interested in (which, by the way, I don't know ahead of time. I only
know where it is in the file). I can't find a utility or command that
will extract everything that falls between those points. Does such a
thing exist?
</STRONG></P>
<P><STRONG>
Thanks
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
awk and sed are considered to be "standard shell utilities."
(They are part of the POSIX specification).
</BLOCKQUOTE>
<BLOCKQUOTE>
The sed expression is simply:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
sed -n "$begin,${end}p" ...
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... if begin and end are line numbers.
</BLOCKQUOTE>
<BLOCKQUOTE>
For patterns it's easier to use awk:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
awk "/$begin/,/$end/" ...
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... Note: begin and end are regexes and should be
chosen carefully!
</BLOCKQUOTE>
<BLOCKQUOTE>
However, since you don't want to do it the
easy way, here are some alternatives:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
<TT>------------------</TT> WARNING: very long <TT>-------------------------</TT>
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
If it is a text file and you just want some lines out of
it try something like:
</BLOCKQUOTE>
<blockquote><pre> #!/bin/sh
# shextract.sh
# extract part of a file between a
# pair of globbing patterns
[ "$#" -eq "2" ] || {
echo "Must supply begin and end patterns" >&2
exit 1
}
begin=$1
end=$2
of="" ## output flag
while read a; do
case "$a" in
"$begin") of="true";;
"$end") of="";;
esac
[ -n "$of" ] && echo $a
done
exit 0
</pre></blockquote>
<BLOCKQUOTE>
... this uses no external utilities except for the
test command ('[') and possibly the 'echo' command from
VERY old versions of Bourne sh. It should be supported
under any Bourne shell derivative. Under bash these
are builtin commands.
</BLOCKQUOTE>
<BLOCKQUOTE>
It takes two parameters. These are "globbing" patterns
NOT regular expressions. They should be quoted, especially
if they contain shell wildcards (?, *, and [...]
expressions).
</BLOCKQUOTE>
<BLOCKQUOTE>
Read any good shell programming reference (or even the
rather weak 'case...esac' section of the bash man page)
for details on the acceptable pattern syntax. Note
because of the way I'm using this you could invoke
this program (let's call it shextract, for "shell
extraction") like so:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
shextract "[bB]egin|[Ss]tart" "[Ee]nd|[Ss]top"
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... to extract the lines between the any occurrence
of the term "begin" or "Begin" or "start" or "Start" and
the any subsequent occurence of "end" or "End" or "stop"
or "Stop."
</BLOCKQUOTE>
<BLOCKQUOTE>
Notice that I can use the (quoted) pipe symbol in this
context to show "alternation" (similar to the egrep use
of the same token).
</BLOCKQUOTE>
<BLOCKQUOTE>
This script could be easily modified to use regex's
instead of glob patterns (though we'd either have to
use 'grep' for that or rely on a much newer shell
such as ksh '93 or bash v. 2.x to do so).
</BLOCKQUOTE>
<BLOCKQUOTE>
This particular version will extract <EM>all</EM> regions
of the file that lie between our begin and end tokens.
</BLOCKQUOTE>
<BLOCKQUOTE>
To stop after the first we have to insert a "break"
statement into our "$end") ...;;; case. To support
an "nth" occurence of the pattern we'd have to use
an additional argument. To cope with degenerate
input (cases where the begin and end tokens might be
out of order, nested or overlapped) we'd have to
do considerably more work.
</BLOCKQUOTE>
<BLOCKQUOTE>
As written this example requires exactly two arguments.
It will only process input from stdin and only write
to stdout. We could easily add code to handle
more arguments (first two are patterns, 'shift'ed out
rest are input file names) and some options switches
(for output file, only one extraction per file,
emit errors if end pattern is found before start
pattern, emit warnings if no begin or subsequent end
pattern is found on any input file, stop processing on
any error/warning, etc).
</BLOCKQUOTE>
<BLOCKQUOTE>
Note: my exit 0 may seem superfluous here. However,
it does prevent the shell from noting that the
program "exited with non-zero return value" or
warnings to that effect. That's due to my use of
test ('[') on my output flag in my loop. In the
normal case that will have left a non-zero return value
since my of flag will be zero length for the part of
the file AFTER the end pattern was found.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note: this program is SLOW. (That's what you get for
asking for it in sh). Running it on my 38,000 line
<TT>/usr/share/games/hangman-words</TT> (this laptop doesn't
have <TT>/usr/dict/words</TT>) it takes about 30 seconds or
roughly only 1000 lines per second on a P166 with 16Mb
of RAM. A binary can do better than that under MS-DOS
on a 4Mhz XT!
</BLOCKQUOTE>
<BLOCKQUOTE>
BUG: If any lines begin with <TT>-</TT> (dashes) then your version
of echo <EM>might</EM> try to treat the beginnings of your lines
as arguments. This <EM>might</EM> cause the echo command to
parse the rest of the line for escape sequences. If you
have printf(1) evailable (as a built-in to your shell or
as an external command) then you might want to use that
instead of echo.
</BLOCKQUOTE>
<BLOCKQUOTE>
To do this based on line numbers rather than patterns
we could use something more like:
</BLOCKQUOTE>
<blockquote><pre>#!/bin/sh
# lnextract.sh
# extract part of a file between a
# line numbers $1 and $2
function isnum () {
case "$1" in
*[^0-9]*)
return 1;;
esac
}
[ "$#" -gt "2" ] || {
echo "Must supply begin and end line numbers" >&2
exit 1
}
isnum "$1" || {
echo "first argument (first line) must be a whole number" >&2
exit 1
}
isnum "$2" || {
echo "second argument (last line) must be a whole number" >&2
exit 1
}
begin=$1
end=$2
[ "$begin" -le "$end" ] || {
echo "begin must be less than or equal to end" >&2
exit 1
}
shift 2
for i; do
[ -r "$i" -a -f "$i" ] || {
echo "$i should be an existing regular file" >&2
continue
}
ln=0
while read a ; do
let ln+=1
[ "$ln" -ge "$begin" ] && echo $a
[ "$ln" -lt "$end" ] || break
done < "$i"
done
exit 0
</pre></blockquote>
<BLOCKQUOTE>
This rather ugly little example does do quite a
bit more checking than my previous one.
</BLOCKQUOTE>
<BLOCKQUOTE>
It checks that its first two arguments are
numbers (your shell must support negated character
class globs for this, ksh '88 and later, bash 1.x and 2.x,
and zsh all qualify), and that the first is less than or
equal to the latter. Then it shifts those out of
the way so it can iterate over the rest of the
arguments, extracting our interval of line from
each. It checks that each file is "regular"
(not a directory, socket, or device node) and
readable before it tries to extract a portion of
it. It will follow symlinks.
</BLOCKQUOTE>
<BLOCKQUOTE>
It has some of the same limitations we saw before.
</BLOCKQUOTE>
<BLOCKQUOTE>
In addition it won't accept it's input from stdin
(although we could add that by putting the main loop
into a shell function and invoking it one way if
our arg count was exactly two, and differently
(within our for loop) if $# is greater than two.
I don't feel like doing that here <TT>---</TT> as this message
is already way too long and that example is complicated
enough.
</BLOCKQUOTE>
<BLOCKQUOTE>
It's also possible to use a combination of 'head' and
'tail' to do this. (That's a common exercise in
shell programming classes). You just use something
like:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
head -$end $file | tail -$(( $end - $begin ))
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... note that the 'tail' command on many versions
of UNIX can't handle arbitrary offsets. It can
only handle the lines that fit into a fixed block size.
GNU tail is somewhat more robust (and correspondingly
larger and more complicated). A classic way to
work around limitations on tail was to use tac (cat
a file backwards, from last line to first) and
head (and tac again). This might use prodigous
amounts of memory or disk space (might use temporary
files).
</BLOCKQUOTE>
<BLOCKQUOTE>
If you don't want line oriented output <TT>---</TT> and your
patterns are regular expressions, and you're willing
to use grep and dd then here's a different approach:
</BLOCKQUOTE>
<blockquote><pre> start=$(grep -b "$begin" ... )
stop=$(( $( grep -b "$end" ... ) - $begin ))
dd if="$file" skip=$begin count=$stop bs=1b
</pre></blockquote>
<BLOCKQUOTE>
This is not a shell script, just an example.
Obviously you'd have to initialize $begin, $end, and $file
or use $1, $2, and $3 for them to make this into a
script. Also you have to modify those grep <TT>-b</TT> commands
a little bit (note my ellipses). This is because grep
will be giving us too much information. It will be
giving a byte offset to the beginning of each pattern
match, and it will be printing the matching line, too.
</BLOCKQUOTE>
<BLOCKQUOTE>
We can fix this with a little work. Let's assume that
we want the first occurrence of "$begin" and the last
occurence of "$end" Here's the commands that will
just give us the raw numbers:
</BLOCKQUOTE>
<blockquote><pre> grep -b "$begin" "$file" | head -1 {
IFS=:
read b x
echo b
}
grep -b "$end" "$file" | tail -1 | {
IFS=:
read e x
echo e
}
</pre></blockquote>
<BLOCKQUOTE>
... notice I just grep through head or
tail to get the first or last matching line,
and I use IFS to change my field separator
to a ":" (which grep uses to separate the offset
value from the rest of the line). I read the
line into two variables (separated by the
IFS character(s)), and throw away the extraneous
data by simply echoing the part I wanted
(the byte offset) back out of my subshell.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note: whenever you use or see a pipe operator
in a shell command or script <TT>---</TT> you should
realize that you've created an implicit subshell
to handle that.
</BLOCKQUOTE>
<BLOCKQUOTE>
Incidentally, if your patterns <EM>might</EM> have a
leading <TT>-</TT> (dash) then you'll have problems
passing them to grep. You can massage the
pattern a little bit by wrapping the first
character with square brackets. Thus "foo"
becomes "[f]oo" and "<TT>-bar</TT>" becomes "[-]bar".
(grep won't consider an argument starting
with [ to be a command line switch, but it
will try to parse <TT>-bar</TT> as one).
</BLOCKQUOTE>
<BLOCKQUOTE>
This is easily done with printf and sed:
</BLOCKQUOTE>
<blockquote><pre> printf "%s" "$pattern" | sed -e 's/./[&]/'
</pre></blockquote>
<BLOCKQUOTE>
... note my previous warning about 'echo' <TT>---</TT>
it's pretty permissive about arguments that
start with dashes that it doesn't recognize, it'll
just echo those without error. But if your pattern
starts with "<TT>-e</TT> " or <TT>-n</TT> it can effect out the rest
of the string is represented.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note that GNU grep and echo DON'T seem to take the
<TT>--</TT> option that is included with some GNU utilities.
This would avoid the whole issue of leading dashes
since this conventionally marks the end of all
switch/option parsing for them.
</BLOCKQUOTE>
<BLOCKQUOTE>
Of course you said you didn't want to use sed,
so you've made the job harder. Not impossible,
but harder. With newer shells like ksh '93 and
bash 2.x we can use something like:
</BLOCKQUOTE>
<blockquote><pre> [${pattern:0:1}]${pattern:1}
</pre></blockquote>
<BLOCKQUOTE>
(read any recent good book on shell programming
to learn about parameter expansion).
</BLOCKQUOTE>
<BLOCKQUOTE>
You can use the old 'cut' utility, or 'dd' to
get these substrings. Of course those are just
as external to the shell as perl, awk, sed,
test, expr and printf.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you really wanted to do this last sort of
thing (getting a specific size substring from
a variable's value, starting from an offset
in the string, using only the bash 1.x parameter
expansion primitives) it could be done with a whole
lot of fussing. I'd use ${#varname} to get the
size, a loop to build temporary strings of
? (question mark) characters to of the right
length and the ${foo#} and ${foo%} operators
(stripping patterns from the left and right of
variable's value respectively)
to isolate my substring.
</BLOCKQUOTE>
<BLOCKQUOTE>
Yuck! That really is as ugly as it sounds.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway. I think I've said enough on the subject
for now.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'm sure you can do what you need to. Alot of
it depends on which shell you're using (not just
csh vs. Bourne, but ksh '88 vs. '93 and bash v1.14
vs. 2.x, etc) and just how rigit you are about that
constraint about "standard utilities"
</BLOCKQUOTE>
<BLOCKQUOTE>
All of the examples here (except for the ${foo:}
parameter expansion) are compatible with bash 1.14.
</BLOCKQUOTE>
<BLOCKQUOTE>
(BTW: now that I'm really learning C <TT>---</TT> y'all can
either rest easy that I'll be laying off the sh
syntax for awhile, or lay awake in fear of what I'll
be writing about next month).
</BLOCKQUOTE>
<BLOCKQUOTE>
Here's a short GNU C program to print a set of
lines between one number and another:
</BLOCKQUOTE>
<blockquote><pre>/* extract a portion of a file from some beginning line, to
* some ending line
* this functions as a filter --- it doesn't take a list
* of file name arguments.
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int
main (int argc, char * argv[] )
{
char * linestr;
long begin, end, current=0;
ssize_t * linelen;
linelen = 0;
linestr=NULL;
if ( argc < 3 ) {
fprintf(stderr, "Usage: %s begin end\n", argv[0]);
exit(1);
}
begin=atol(argv[1]);
if ( begin < 1 ) {
fprintf(stderr, "Argument error: %s should be a number "
"greater than zero\n", argv[1]);
exit(1);
}
end=atol(argv[2]);
if ( end < begin ) {
fprintf(stderr, "Argument error: %s should be a number "
"greater than arg[1]\n", argv[1]);
exit(1);
}
while ( getline(&linestr, &linelen, stdin ) > -1
&& (++current < end ) ) {
if (current >= begin) {
printf("%s", linestr);
}
}
exit(0);
return 0;
}
</pre></blockquote>
<BLOCKQUOTE>
This is about the same length as my shell version.
It uses<TT> atol()</TT> rather than<TT> strtol()</TT> for the
argument to number conversion.<TT> atol()</TT> (ASCII to long)
is simpler, but can't convey errors back to us.
However, I require values greater than zero, and GNU
glibc<TT> atol()</TT> returns 0 for strings that can't be
converted to longs. I also use the GNU<TT> getline()</TT>
function <TT>---</TT> which is non-standard, but much more
convenient and robust than fussing with<TT> scanf()</TT>,
<TT>fgets()</TT> and<TT> sscanf()</TT>, and<TT> getc()</TT> stuff.
</BLOCKQUOTE>
<BLOCKQUOTE>
Tim, I've copied this my Linux Gazette editor, since
it's a pretty general question and a way detailed
answer. Unless you have any objection it will
go into my column in the next issue. The sender's
e-mail address and organizational affiliation are
always removed from answer guy articles unless
they request otherwise.
</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"
>Zipping Across the LAN</H3>
<p><strong>From jashby on Sun, 02 Apr 2000
</strong></p>
<!-- ::
Zipping Across the LAN
~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello ,
</STRONG></P>
<P><STRONG>
My name is Jason Ashby i work for a computer company and am really new
to Linux i have been given the task to make a zip drive visible accross
a network, it is loaded on a linux machine and i can get the AIX machine
to mount it but we can not copy files to or from the zip drive on AIX
could you see it within your power to tell me why .
</STRONG></P>
<P><STRONG>
Thanks
Jason Ashby
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Unfortunately your question is unclear.
You don't tell me which system is supposed to be the server, what
sorts systems are intended to be the clients, nor what type of
filesystems will be contained on the Zip media.
</BLOCKQUOTE>
<BLOCKQUOTE>
"make a zip drive visible accross [sic] a network"
</BLOCKQUOTE>
<BLOCKQUOTE>
... presumably you mean via NFS or Samba. If the client systems
are UNIX or Linux you'd use NFS, if they are MS-Windows or OS/2
you'd use Samba. (If they were Apple Macs running MacOS you'd
look at the netatalk or CAP packages, and if they were old MS-DOS
machines you might try installing Netware client drivers on those
and mars_nwe or a commercial copy of Netware on the Linux box).
</BLOCKQUOTE>
<BLOCKQUOTE>
Let's assume you mean to mount the Zip disks on your Linux box,
and "export" them (NFS terminology) to your AIX systems. Then
you'd modify your <TT>/etc/fstab</TT> to contain an entry appropriate to
mount the Zip media into your file hierarchy. Maybe you'd mount
it under <TT>/mnt/zip</TT> or under <TT>/zip.</TT> (You might have multiple fstab
entries to support different filesystems that you might have
stored on your Zip media. In most cases you'd use msdos, or one
of the other variants of Linux' MS-DOS filesystem: umsdos, vfat,
or uvfat).
</BLOCKQUOTE>
<BLOCKQUOTE>
Then you'd edit your <TT>/etc/exports</TT> file to export that to your
LAN (or to specific hosts or IP address/network patterns).
</BLOCKQUOTE>
<BLOCKQUOTE>
Try reading the man pages for <TT>/etc/fstab</TT> and <TT>/etc/exports</TT> and
perusing the following HOWTOs:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Zip Drive Mini-HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/mini/ZIP-Drive.html"
>http://www.linuxdoc.org/HOWTO/mini/ZIP-Drive.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
NFS HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/NFS-HOWTO.html"
>http://www.linuxdoc.org/HOWTO/NFS-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
And the excellent new:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Filesystems HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html"
>http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
by Martin Hinner.
</BLOCKQUOTE>
<BLOCKQUOTE>
If that doesn't do the trick, try clarifying your question. It
often helps to draw a little map (ASCII art is good!).
</BLOCKQUOTE>
<!-- end 3 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/4"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 4 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Accessing Local MS-DOS/Windows '9x Drives/Disks from Linux</H3>
<p><strong>From David Buckley on Wed, 05 Apr 2000
</strong></p>
<!-- ::
Accessing Local MS-DOS/Windows '9x Drives/Disks from Linux
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
I am new to linux and am wondering if there is an easy way to access my
Win98 disk from within linux. i have lots of files (mp3s, etc.) that i
would like to use in linux. what is the easiest way to get them?
</STRONG></P>
<P><STRONG>
Thanks,
David Buckley
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I'm guessing you're talking about accessing files that are on
you local system (that you have a dual-boot installation).
</BLOCKQUOTE>
<BLOCKQUOTE>
In that case use the 'mount' command. For example the first
partition on your first IDE drive is <TT>/dev/hda1</TT> (under Linux). If
that's your C: drive under MS-DOS/Windows then you can use a
command like:
</BLOCKQUOTE>
<blockquote><pre> mkdir /mnt/c && mount -t vfat /dev/hda1 /mnt/c
</pre></blockquote>
<BLOCKQUOTE>
... (as the 'root' user) to make the C: directory tree appear
under <TT>/mnt/c.</TT>
</BLOCKQUOTE>
<BLOCKQUOTE>
Once you've done that you can use normal Linux commands and
programs to access those files.
</BLOCKQUOTE>
<BLOCKQUOTE>
That will only mount the filesystem for that duration of that
session (until your reboot or unmount it with the 'umount'
command). However, you can make this process automatic by adding
an entry to your <TT>/etc/fstab</TT> (filesystem table).
</BLOCKQUOTE>
<BLOCKQUOTE>
For more info on this read the appropriate sections of the Linux
Installation & Getting Started Guide (*), the System
Administrator's Guide (*) (both part of the <A HREF="http://www.linuxdoc.org/">LDP</A> at
<A HREF="http://www.linuxdoc.org"
>http://www.linuxdoc.org</A>) and the mount(8), and fstab(5) man pages
with the following command:
</BLOCKQUOTE>
<blockquote><pre> man 8 mount; man 5 fstab
</pre></blockquote>
<BLOCKQUOTE>
(Note, in the first case you do need to specify the
manual chapter/section number, 8, since there is a<TT> mount()</TT>
system call which is used by programmers, particularly for
writing programs like the 'mount' command itself). When you
see references to keywords in this form foo(1), it's a hint
that foo is documented in that chapter of the man pages: 1
is user commands, 2 is system calls, 3 is library functions,
4 is for devices, 5 is for file formats, etc).
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
*( LIGS: Chapter 4 System Administration
<DD><A HREF="http://www.linuxdoc.org/LDP/gs/node6.html#SECTION00640000000000000000"
>http://www.linuxdoc.org/LDP/gs/node6.html#SECTION00640000000000000000</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
LSAG: Filesystems
<A HREF="http://www.linuxdoc.org/LDP/sag/x1038.html"
>http://www.linuxdoc.org/LDP/sag/x1038.html</A> )
</BLOCKQUOTE>
<BLOCKQUOTE>
To access your MS-DOS formatted floppies it's often easier to use
the mtools commands. Look at the mtools(1) man pages for details
on that.
</BLOCKQUOTE>
<BLOCKQUOTE>
Here are a couple of other HOWTOs to read through:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
From DOS/Windows to Linux HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/DOS-Win-to-Linux-HOWTO.html"
>http://www.linuxdoc.org/HOWTO/DOS-Win-to-Linux-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Filesystems HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html"
>http://www.linuxdoc.org/HOWTO/Filesystems-HOWTO.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
In general you want to look through these to find answer to
most common Linux questions. As you might imagine, you've asked
a very common one here). In fact it's number 4.2 in the FAQ
<A HREF="http://www.linuxdoc.org/FAQ/Linux-FAQ-4.html#ss4.2"
>http://www.linuxdoc.org/FAQ/Linux-FAQ-4.html#ss4.2</A>
</BLOCKQUOTE>
<BLOCKQUOTE>
You can also search the Linux Gazette at:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Full search on archive Linux Gazette Search
<DD><A HREF="http://www.linuxgazette.com/search.html"
>http://www.linuxgazette.com/search.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
Although I can see how you might not know what terms to search on
until you've covered some of the basics in the LDP guides, or any
good book on Linux.
</BLOCKQUOTE>
<BLOCKQUOTE>
There are also ways to access your Win '9x "shares" (network
accessible files, or "exported" directories) from Linux using
smbfs.
</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"
>More on >> zsh Co-processes</H3>
<p><strong>From Paul Ackersviller on Wed, 05 Apr 2000
</strong></p>
<!-- ::
More on >> zsh Co-processes
~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Jim,
</STRONG></P>
<P><STRONG>
I believe I forgot to say thanks for having written the original answer as
it was. I've programmed shells for ages, but have never had occasion to use
co-processes. Seeing examples of how it's done are alway a good thing.
</STRONG></P>
<P><STRONG>
--
Paul Ackersviller
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
You're welcome. I've never actually used them myself.
However, I was jazzed to learn how they actually work when
someone I was working with showed me an example.
</BLOCKQUOTE>
<BLOCKQUOTE>
Sometimes I take advantage of being "The Answer Guy" and
grab any pretense to show of some need trick that I've
discovered or been shown (I usually try to give credit
where credit is due <TT>---</TT> but sometimes that's pretty ambiguous and
doesn't fit into the flow of what I'm typing).
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, I'm a firm believer in having a full toolbox. You
often won't know what tool <EM>would</EM> do the trick unless you've
seen a wide enough variety of tools to recognize a nail vs.
a screw and can associate one with a hammer and the other with
a screwdriver.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 5 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/6"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 6 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Linux for AMD, Cyrix, etc</H3>
<p><strong>From Ranone7 on Wed, 05 Apr 2000
</strong></p>
<!-- ::
Linux for AMD, Cyrix, etc
~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
At this web site <A HREF="http://www.linuxmall.com/product/01462.html"
>http://www.linuxmall.com/product/01462.html</A> I see
the title "<A HREF="http://www.redhat.com/">Red Hat</A> Linux Deluxe for Intel" Is there a Linux for
AMD out there? or can I use the above linux version with an
AMD-Athlon.
</STRONG></P>
<P><STRONG>
Thank you
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
The packaging is suffering from a compromise. It's trying
not to sound too technical. Red Hat Linux <EM>for Intel</EM>
should work on any x86 and compatible CPUs. Note that
Mandrake requires at least a Pentium (it won't work on
old 486 and 386 systems).
</BLOCKQUOTE>
<BLOCKQUOTE>
What Red Hat Inc was trying to do which this verbiage
is distiguish that box from the versions that they have
available for SPARC and Alpha based systems. Eventually they'll
also probably have a PowerPC package available as well.
</BLOCKQUOTE>
<BLOCKQUOTE>
Many other distributions are similarly available on several
platforms.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 6 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 6 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Linux - AMD?</H3>
<p><strong>Answered By Martin Pool on Thu, 06 Apr 2000
</strong></p>
<P><STRONG>
On Wed, 5 Apr 2000, Jim Dennis wrote:
</STRONG></P>
<P><STRONG><FONT COLOR="#000099"><EM><BLOCKQuote>
<BR>>At this web site <A HREF="http://www.linuxmall.com/product/01462.html"
<BR>> >http://www.linuxmall.com/product/01462.html</A> I see
<BR>>the title "<A HREF="http://www.redhat.com/">Red Hat</A> Linux Deluxe for Intel" Is there a Linux for
<BR>>AMD out there? or can I use the above linux version with an
<BR>>AMD-Athlon.
</BLOCKQuote></EM></FONT></STRONG></P>
<P><STRONG><FONT COLOR="#000099"><EM>
<BR>>Thank you
</EM></FONT></STRONG></P>
<P><STRONG><FONT COLOR="#000066"><EM>
The packaging is suffering from a compromise. It's trying
not to sound too technical. Red Hat Linux <EM>for Intel</EM>
should work on any x86 and compatible CPUs. Note that
Mandrake requires at least a Pentium (it won't work on
old 486 and 386 systems).
</EM></FONT></STRONG></P>
<P><STRONG>
Good explanation. IIRC Athlons are only supported in 2.2.something, so
they'll also need a recent distribution. I guess any RedHat version on
sale these days will be OK, but notably <A HREF="http://www.debian.org/">Debian</A> slink/stable will <EM>not</EM>
boot.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Thanks for that note [from one of the guys on the
<A HREF="http://www.linuxcare.com/">Linuxcare</A> list that now receives answerguy responses].
</BLOCKQUOTE>
<BLOCKQUOTE>
I remember hearing about Athlon problems, but I didn't ever get the
full story. I was spoiled by the fact that most x86 compatible
chips really are <EM>x86 COMPATIBLE</EM>. I still don't know what the
whole deal with that Athlon chip is. I'll BCC someone on this
to see if he can clue me in.
</BLOCKQUOTE>
<!-- end 6 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 6 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Linux - AMD?</H3>
<p><strong>Answered By David Benfell on Thu, 6 Apr 2000
</strong></p>
<BLOCKQUOTE>
The story, as I was able to piece it together, is that the problem was
found and fixed in the 2.3.19 kernel. The correction had to do with
Memory Type Range Register (MTRR) code. This patch was backported to,
possibly the 2.2.12 kernel, and, almost certainly, the 2.2.13 kernel.
</BLOCKQUOTE>
<BLOCKQUOTE>
However, it still seems to have been an issue with the Mandrake 6.5
distribution, which had a 2.2.12 kernel. On the other hand, my
neighbor just installed <A HREF="http://www.redhat.com/">Red Hat</A> 6.2, with, I think, a 2.2.12 kernel
(but the site won't tell), on an Athlon. So I'm confused.
</BLOCKQUOTE>
<BLOCKQUOTE>
David Benfell
</BLOCKQUOTE>
<EM>[ <BLOCKQUOTE>
So, if you know more about the Athlon MTRR mystery, enlighten us please!
</BLOCKQUOTE><P>-- Heather. ]</P></EM>
<!-- end 6 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/7"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 7 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>UNIX User Tries Linux 'rsh'</H3>
<p><strong>From Le, Dong, ALNTK on Fri, 07 Apr 2000
</strong></p>
<!-- ::
UNIX User Tries Linux 'rsh'
~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello "The Answer Guy",
</STRONG></P>
<P><STRONG>
My name is Dong Le. I'm quite new to Linux. Since I come from Unix world, I
try to use Unix concepts to apply on Linux. Some times it works, most of the
time does not.
</STRONG></P>
<P><STRONG>
Anyway, I have Redhat 6.1 installed on my 2 PC intel-based. I tried to use
rcp to remote copy files from one PC to another. I got the error:
"permission denied" from other PC. I have a file ".rhosts" setup to give
permission to other PC. I use "octet format" in all of files/commands so
DNS/NIS are not involved at all.
</STRONG></P>
<P><STRONG>
My questions are:
</STRONG></P>
<P><STRONG><BLOCKQuote>
<TT>-</TT> Why do I have this error?
</BLOCKQuote></STRONG></P>
<P><STRONG>
<TT>-</TT> Later on I found out that Linux is using PAM to do authentication. For
rcp, it is using <TT>/etc/pam.d/rsh.conf</TT> to authenticate. However, I can not
find any information about PAM modules (pam_rhosts_auth.so, for example)
regarding how it works. Do you know where I can obtain information about
particular PAM module?
</STRONG></P>
<P><STRONG>
Thanks a lot,
Dong Le,
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Short answer: Use ssh!
</BLOCKQUOTE>
<BLOCKQUOTE>
There are a few problems here. First, I've seen versions of rshd
(the rsh daemon) that would not seem to accept octet addresses.
More importantly many Linux distributions are configured not to
respect your ~/.rhosts files.
</BLOCKQUOTE>
<BLOCKQUOTE>
You are correct that you have to co-ordinate your policy using the
PAM if your system has the "Pluggable Authentication Modules"
suite of programs installed. The configuration file would be
<TT>/etc/pam.d/rsh.</TT> Here's the default that would be installed by
<A HREF="http://www.debian.org/">Debian</A>:
</BLOCKQUOTE>
<blockquote><pre>#%PAM-1.0
auth required pam_rhosts_auth.so
auth required pam_nologin.so
auth required pam_env.so
account required pam_unix_acct.so
session required pam_unix_session.so
</pre></blockquote>
<BLOCKQUOTE>
Yours would be pretty similar.
</BLOCKQUOTE>
<BLOCKQUOTE>
In addition you might find that you need to also modify the
arguments on the in.rshd line in your <TT>/etc/inetd.conf</TT> file. For
example if there's a <TT>-l</TT> option it may be causing your copy of
in.rshd to ignore user ~/.rhosts files. A <TT>-h</TT> option will force it
to ignore the contents of any <TT>/etc/hosts.equiv</TT> file.
</BLOCKQUOTE>
<BLOCKQUOTE>
(The new Debian rshd package ignores these additional options and
requires that you configure your policy through the <TT>/etc/pam.d/</TT>
files. I don't know if <A HREF="http://www.redhat.com/">Red Hat</A> has modified it's packages in this
way for versions 6.1 or 6.2. In 6.0 I'm pretty sure that I was
still able to use the command line arguments on the in.rshd entry
in the <TT>/etc/inet.conf</TT> file for this.)
</BLOCKQUOTE>
<BLOCKQUOTE>
Of course you can use ssh as a resplacement to rsh, and have
much better security as well.
</BLOCKQUOTE>
<!-- end 7 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/8"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 8 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Telnet</H3>
<p><strong>From Cleary, James R. on Fri, 07 Apr 2000
</strong></p>
<P><STRONG>
Jim,
</STRONG></P>
<P><STRONG>
I just clean installed Redhat 6.0 on my box. I can ping the
</STRONG></P>
<P><STRONG>
box from another machine, but I can't telnet to it, the default
configuration should provide for that, shouldn't it? Any help
you'd have would be great.
</STRONG></P>
<P><STRONG>
Sincerely,
"J.C."
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
When you say "you can't telnet to it" what do you mean?
Does the telnet client seem to just sit there for a long time? Do
you get an error message that says something like "connection
refused?" Does that come back immediately, or does it take a
minute or two? Are you trying to telnet to it by name, or by IP
address? (That basically doesn't matter as long as you're using
the same form for your ping command).
</BLOCKQUOTE>
<BLOCKQUOTE>
I disagree with your assertion that the "default configuration
should provide for that?" Linux appeals to a much broader range
of users than traditional, professionally managed UNIX systems.
It is not appropriate to assume that all of your users what to be
"telnet hosts" (servers or multi-user workstations). In addtional
telnet is an old and basically depracated means of remote access.
</BLOCKQUOTE>
<BLOCKQUOTE>
(Well, it should be deprecated).
</BLOCKQUOTE>
<BLOCKQUOTE>
You should probably use ssh, STEL, ssltelnet, or install a
Kerberos or the <A HREF="http://www.xs4all.nl/~freeswan/">FreeS/WAN</A> IPSec infrastructure to provide you with
an encrypted, unspoofable, unsniffable connection between your
client and your server.
</BLOCKQUOTE>
<BLOCKQUOTE>
Please don't respond with "but I'm behind a firewall" or "this is
just my home system." Those are "head in the sand" attitudes that
make for a brittle infrastructure (one little crack and the whole
wall collapses).
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, if you've termined that telnet is really what you need,
that it matches your requirements and enforces your policies to
your satisfaction, then here's some pointer to troubleshooting
common failures. These also apply to ssh, STEL, etc.
</BLOCKQUOTE>
<BLOCKQUOTE>
You said that 'ping' is working. Assuming that you are using the
commands from the same host and using the same form of
addressing/naming for your 'ping' and your 'telnet' commands here
are the most likely problems:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
* You're session might not actually be failing. It might
just be taking a very long time. Search the answer guy
back issues for the phrase "double;reverse;dns" and you'll
find a number of my previous explanations about a common
cause of this delay (and some pointer on what to do about it)
Here are a couple of them:
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 45: More "Can't Telnet Around My LAN" Problems
<DD><A HREF="http://www.linuxgazette.com/issue45/tag/11.html"
>http://www.linuxgazette.com/issue45/tag/11.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 38: Telnetd and pausing
<DD><A HREF="http://www.linuxgazette.com/issue38/tag/32.html"
>http://www.linuxgazette.com/issue38/tag/32.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 30: tv cards and dual monitor
<DD><A HREF="http://www.linuxgazette.com/issue30/tag_tvcard.html"
>http://www.linuxgazette.com/issue30/tag_tvcard.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
* You might not have the telnet daemon package installed
</BLOCKQUOTE>
<BLOCKQUOTE>
on your target host. It might be installed but not
properly configured in <TT>/etc/inetd.conf.</TT> That should
contain a line that looks something like:
</BLOCKQUOTE>
<blockquote><pre>telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
</pre></blockquote>
<BLOCKQUOTE>
* You might not have inetd running. (It's the daemon, service
</BLOCKQUOTE>
<BLOCKQUOTE>
program, that reads the <TT>/etc/inetd.conf</TT>, listens for
connections on those ports, and dispatches the various
service programs that handle those services).
</BLOCKQUOTE>
<BLOCKQUOTE>
(An obscure possibility is that you might have something
broken in your name services handling. You system would
normally match service/protocol names to IP port numbers
and transport layer protocols (TCP, UDP, etc) using the
<TT>/etc/services</TT> file. If that's corrupted, or if your
<TT>/etc/nsswitch.conf</TT> is pointing your NSS libraries to
query some really bogus and corrupted backend it would be
possible that inetd would end up listening to the wrong
ports for many services. I've never seen anyone mess
that up <TT>--</TT> but I'm sure it's possible).
</BLOCKQUOTE>
<BLOCKQUOTE>
* There may be a firewall or packet filtering system between
</BLOCKQUOTE>
<BLOCKQUOTE>
your client and your target. That might let ICMP ('ping'
traffic) through while blocking your TCP ('telnet' on port
23) traffic.
</BLOCKQUOTE>
<BLOCKQUOTE>
* It's possible that you're telnet client program, or one
</BLOCKQUOTE>
<BLOCKQUOTE>
of the client libraries is broken, or that you have some
degenerate values in your environment or even in your
own .telnetrc file. The 'telnet' client exchanges a
number of key environment variables with the daemon
to which it connects. This is to configure your terminal
type, set your username and your DISPLAY values, your
timezone, and some other stuff. It's possibly (though
unlikely) that you could be tripping over something that
the 'in.telnetd' on your target really doesn't like).
</BLOCKQUOTE>
<BLOCKQUOTE>
Hopefully that will help.
</BLOCKQUOTE>
<BLOCKQUOTE>
When asking about these sorts of problems it's important to
be quite specific about the failure mode (the symptoms). It is
VERY important to capture and quote any error messages that you
get and to explain exactly what command(s) you issued to elicit
those symptoms.
</BLOCKQUOTE>
<BLOCKQUOTE>
Unfortunately crafting a good question is sometimes harder than
answering them. (In fact I have managed to come across answer
on many occasions while I was writing up the question I intended
to post. The process or rigorously describing the problem has
often led me to my own answers. Sometimes I post the message
with my solution anyway).
</BLOCKQUOTE>
<BLOCKQUOTE>
One tip for troubleshooting this. Staring with 'ping' is a good
idea. It basically eliminates a number of possible problems
from the low-level "is the network card configured and is a
cable plugged into it?" parts of your problem. It's also good
to do a 'traceroute' to your target. This might show that your
packets are being routed through some unexpected device that is
filtering some of your traffic.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you have console access to the target server (including a "carbon
proxy" <TT>---</TT> a person on the phone in front of it) then you can
run (or have your proxy) run the 'tcpdump' command. This can
show you the headers of every packet that comes across a given
network interface. 'tcpdump' has a small language for describing
the exact sorts of traffic that you want to see and filtering out
all the other traffic that you don't want. If you search the
LG AG archives on 'tcpdump' you should find a number of examples
of how to use it. You might go for something like:
</BLOCKQUOTE>
<blockquote><pre> tcpdump -i eth0 -n host $YOURCLIENT and port 23
</pre></blockquote>
<BLOCKQUOTE>
... for example. (TCP port 23 is the standard for telnet traffic).
</BLOCKQUOTE>
<BLOCKQUOTE>
If that doesn't work, you might consider temporarily replacing your
'in.telnetd' with an 'strace' wrapper script. Basically
you just rename the in.telnetd file to in.telnetd.real and
create a shell script (see below) to monitor it:
</BLOCKQUOTE>
<blockquote><pre>#!/bin/sh
exec strace -o /root/testing/telnet.strace /usr/sbin/in.telnetd.real
</pre></blockquote>
<BLOCKQUOTE>
I've described this process before as well. Here's a
link to one of those:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 20
<DD><A HREF="http://www.linuxgazette.com/issue20/lg_answer20.html"
>http://www.linuxgazette.com/issue20/lg_answer20.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Issue 17
<DD><A HREF="http://www.linuxgazette.com/issue17/answer.html"
>http://www.linuxgazette.com/issue17/answer.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
(use your browswer's "search in page" <TT>--</TT> [Alt][F] in Netscape
and the <TT>/</TT> key in Lynx to search on 'strace' to find the
messages I'm talking about. Those older issues were back before
Heather was doing my HTML for me, and splitting each message/thread
into separately HTML pages like I should have been doing all
along).
</BLOCKQUOTE>
<BLOCKQUOTE>
That 'strace' trick is surprising handy. At <A HREF="http://www.linuxcare.com/">Linuxcare</A> we use
it all the time, and it often helps us find missing config files,
directories where files should be, files where directories should
be, mangled permissions, and all sorts of things. There's another
tools called 'ltrace' which gives similar, though slightly higher
level information.
</BLOCKQUOTE>
<BLOCKQUOTE>
Using 'tcpdump' and 'strace' you can troubleshoot almost any
problem in Linux. They are like the "X-Ray" machines and CAT/PET
scanners for Linux tech support people. However, I don't recommend
them lightly. Go through the list of common ailments that I listed
first, consider using ssh instead, and then see if you need
"surgical diagnostics."
</BLOCKQUOTE>
<!-- end 8 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/9"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 9 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Getting Familiar with a UNIX System</H3>
<p><strong>From Patricia Lonergan on Fri, 07 Apr 2000
</strong></p>
<!-- ::
Getting Familiar with a UNIX System
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
How would I find the following on the version of Unix I am using:,A (B OS
type and release, node name, IP address, CPU type, CPU speed, amount of
RAM, disk storage space, number of users who have ids, number of hosts
known.,A (B Thanks Answer Guy
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
The comamnd:
</BLOCKQUOTE>
<blockquote><pre> uname -a
</pre></blockquote>
<BLOCKQUOTE>
Should give you the UNIX name (Linux, SunOS, HP-UX, etc)
and the kernel version/release, architecture, and some other info.
(Might also include the kernel compilation date and host)
</BLOCKQUOTE>
<BLOCKQUOTE>
The command:
</BLOCKQUOTE>
<blockquote><pre> ifconfig -a
</pre></blockquote>
<BLOCKQUOTE>
... should give the the IP address, netmask and broadcast address of
each interface in the system.
</BLOCKQUOTE>
<BLOCKQUOTE>
The command:
</BLOCKQUOTE>
<blockquote><pre> hostname
</pre></blockquote>
<BLOCKQUOTE>
... should give you the the DNS hostname that this system
"thinks" it has. Looking that up via reverse DNS using a
command like:
</BLOCKQUOTE>
<blockquote><pre> dig -x
</pre></blockquote>
<BLOCKQUOTE>
... might be possible if you have the DNS utils package
installed.
</BLOCKQUOTE>
<BLOCKQUOTE>
From there things start to get pretty complicated depending
on which flavor of UNIX you're on, and how it's configured.
(In fact there are exceptional cases where the preceding
commands won't work):
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
I'll confine the rest of my answers to Linux.
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
You can get the CPU type and speed using the command:
</BLOCKQUOTE>
<blockquote><pre> cat /proc/cpuinfo
</pre></blockquote>
<BLOCKQUOTE>
(assuming that your kernel is compiled with the <TT>/proc</TT> filesystem
enabled and that you have <TT>/proc</TT> mounted. Those are the
common case).
</BLOCKQUOTE>
<BLOCKQUOTE>
Linux provides a 'free' command to report on your RAM and
swap availability and usage. Many UNIX systems will have the
'top' command installed. It can also provide that information
(though it defaults to interactive mode <TT>---</TT> and thus is less
useful in scripts).
</BLOCKQUOTE>
<BLOCKQUOTE>
Any UNIX system should provide the 'mount' and 'df' commands to
generate reports about what storage devices are attached and
in use (mounted) and about the amound of free space available on
each. Note you should track not only your free space (data blocks)
but your free inodes (management data) so use both of the following
commands:
</BLOCKQUOTE>
<blockquote><pre> df
df -i
</pre></blockquote>
<BLOCKQUOTE>
The 'mount' command will also report the filesystem types and any
options (readonly, synchronous, etc) that are in effect on these.
You might have to use the 'fdisk <TT>-l</TT>' command to find any
unmounted filesystems (that might not be listed in your <TT>/etc/fstab</TT>
file) under Linux. Solaris has a similar command called prvtoc
(print volume table of contents).
</BLOCKQUOTE>
<BLOCKQUOTE>
Asking about number of user accounts is straightforward on a
system that is just using local <TT>/etc/passwd</TT> and <TT>/etc/group</TT> files
(the default). You can simply using the following:
</BLOCKQUOTE>
<blockquote><pre> wc -l /etc/passwd
</pre></blockquote>
<BLOCKQUOTE>
... to get a number of local users. Note that many of these
accounts are purely system accounts, used to managed the
ownership and permissions on files and system directories.
If you read though that file a little bit it should be obvious
which ones are which. In general Linux distributions start
numbering "real" users (the ones added after the system was
installed) at 500 or 1000 so all of the names with a UID
above that number are "real" (or were added by the system
administrator).
</BLOCKQUOTE>
<BLOCKQUOTE>
However, it's possible (particularly in UNIX system that are
installed on corporate networks) that your system(s) are using
a networked account system such as NIS or NIS+. You might be
able to get some idea of the number of users on such a network
using the 'ypcat' command like so:
</BLOCKQUOTE>
<blockquote><pre> ypcat passwd | wc -l
</pre></blockquote>
<BLOCKQUOTE>
The questions of "number of hosts known" is actually a bit
silly. "Known" in what sense? Most system use DNS for
mapping host names to IP addresses. Thus any Internet connected
system "knows" about millions of hosts. It is possible for
a sysadmin to provide the system with a special list of hosts and
IP addresses using the <TT>/etc/hosts</TT> files, but this is pretty rare
these days. (It's just too likely that you'll get those files
out of sync with your DNS).
</BLOCKQUOTE>
<BLOCKQUOTE>
I suppose you should also look for commands with the letters
"stat" in their name. Read the man pages for 'vmstat', 'netstat'
'lpstat' etc. Many versions of UNIX also include a 'sar' command
though that isn't common on Linux. 'rpcinfo' and 'route'
are other useful commands.
</BLOCKQUOTE>
<BLOCKQUOTE>
This whole set of questions has a "do my homework" tone to it.
(particularly since it's common from a .edu domain). Keep
in mind that I've just barely scratched the surface of the
information that's available to a skilled sysadmin who needs to
become familiar with a new machine. There are hundreds of
other things to know about such a system.
</BLOCKQUOTE>
<BLOCKQUOTE>
Most of the information you care about it under <TT>/etc.</TT> On a
Linux system there is also quite a bit under <TT>/proc</TT> (most of
forms of UNIX that support <TT>/proc</TT> only but process information
thereunder, while the Linux kernel uses it as an abstraction to
provide for all sorts of dynamic kernel status information out to
user space).
</BLOCKQUOTE>
<!-- sig -->
<!-- end 9 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/10"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 10 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Connecting NT and OS/2</H3>
<p><strong>From Carlos Ferrer on Thu, 13 Apr 2000
</strong></p>
<!-- ::
Connecting NT and OS/2
~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Do you know how to connect an NT box with an OS/2 box using null modem?
</STRONG></P>
<P><STRONG>
Thanks,
Carlos Ferrer
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Yes. You plug one end of the null modem cable into a serial
port on one of the boxes, and the other into a serial port on the
other box. Then you install some software on each, configure and
run it.
</BLOCKQUOTE>
<BLOCKQUOTE>
Before you ask:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
NO! I don't know what NT or OS/2 native software you should use.
That's your problem. I answer Linux questions. I'm the Linux Gazette
Answer Guy.
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
So, why don't you ask the technical support from IBM and/or Microsoft.
They sold you the software. They should provide the support. The
Linux community gives us software, so I give away alot of support.
</BLOCKQUOTE>
<BLOCKQUOTE>
Meanwhile, you might have some luck with plain old MS-DOS Kermit.
NT and OS/2 are supposed to support running DOS programs, and they
should allow you to configure their DOS "boxes" (virtual machines,
whatever) to have access to their respective serial ports. You can
also get Kermit '95 which should work on Win '9x, NT, and OS/2.
This is a commercial package. It is not free.
</BLOCKQUOTE>
<BLOCKQUOTE>
The C-Kermit for UNIX and Linux is also not free; though it can be
freely downloaded and compiled. You should read its license to
determine if you can use it freely or whether you are required to
buy the C-Kermit book. (Of course you could support their project
by buying the books regardless). There is also a G-Kermit which is
GPL'd.
</BLOCKQUOTE>
<BLOCKQUOTE>
You can learn about Kermit at:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Columbia University Kermit Project Home page
<DD><A HREF="http://www.columbia.edu/kermit"
>http://www.columbia.edu/kermit</A>
</DL></BLOCKQUOTE>
<!-- sig -->
<!-- end 10 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/11"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 11 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>"Temporarily Controlling a VT"</H3>
<p><strong>From James Knight on Thu, 13 Apr 2000
</strong></p>
<!-- ::
"Temporarily Controlling a VT"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
If I have an interactive program running on a VT, say tty1, can i
temporarily "control" that VT from another, say tty2, or better yet,
through a telnet connection (pts/n)?
</STRONG></P>
<P><STRONG>
For instance, i have naim running on tty1, I've been logging in via
telnet, and killing that process, and start it again so they don't
interfere with each other. Can I just pretend I'm at the console somehow,
then when I logout, i'll still be connected to naim?
</STRONG></P>
<P><STRONG>
Thanks,
Jay Knight
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
The easiest way to do this is to run 'screen'
</BLOCKQUOTE>
<BLOCKQUOTE>
Instead of starting interactive programs directly from your VT
login shell, run 'screen' and start the program thereunder. Now
you can "detach" the whole screen session (with up to 10 interactive
programs running under it) and re-attach from any other sort of
terminal login.
</BLOCKQUOTE>
<BLOCKQUOTE>
I do this routinely. I'm doing it now. Currently I'm working in
an xterm which is 99 characters wide and 35 lines tall. Earlier
I had connected to my system via ssh, and I "yanked" my 'screen'
session over to that xterm (80 characters by 50 lines) using the
following command:
</BLOCKQUOTE>
<blockquote><pre> 'screen -r -d -e^]]'
</pre></blockquote>
<BLOCKQUOTE>
... the <TT>-d</TT> option tells my new 'screen' command to look for another
'screen' session and detach it from wherever it is, the <TT>-r</TT> is to
re-attach it to my current terminal or psuedo-terminal, and the
<TT>-e</TT> option let's me set alternative "escape" and "quote" characters
(more on that in a moment).
</BLOCKQUOTE>
<BLOCKQUOTE>
I've described 'screen' in previous LG issues. However, it is
hard to find. For one thing the desired features are difficult to
describe and the keywords that do cover it are far too general.
For example, so far the keywords we've used are:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
You: temporarily control VT
Me: attach re-attach detach screen session yank
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
... see?
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, here's the VERY short intro to 'screen':
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
First 'screen' just starts an extra shell. So, if you just type 'screen'
(most distributions include 'screen') that's pretty much all you'll get.
(You might get some sort of copyright or other notice). Now you can
run programs as usual. The only big difference is that there is one key
([Ctrl]-[A] by default) which is not captured by 'screen'. That one
"meta" key is your trigger to fire off all of 'screen"s other features.
Here are a few of them (listed below as [Meta]+(key)):
</BLOCKQuote></BLOCKQUOTE>
<blockquote><pre> [Meta] [a] -- send a literal [Meta] to the current session
[Meta] [c] -- create an a additional shell session under
this 'screen'
[Meta] [w] -- display/list current sessions (windows)
[Meta] [A] -- (upper case 'A') set this session's (window's)
title
[Meta] [Esc] -- go into "scrollback" and "copy" mode (keyboard
cut & paste)
[Meta] [Space] -- cycle to the next session
[Meta] [Meta] -- switch to most recent session
[Meta] []] -- (right square bracket) paste copy of "cut" buffer
[Meta] [?] -- Quick help page of other keystrokes
[Meta] [d] -- Detach
[Meta] [S] -- (upper case 'S') split the screen/display
(like 'splitvt')
[Meta] [Q] -- (upper case 'Q') unsplit the screen/display
[Meta] (digit) -- switch directly to session number (digit)
</pre></blockquote>
<BLOCKQUOTE>
There are many others. There are many features to 'screen.' It is
the UNIX/Linux terminal power tool. You also get the ability to
share your session(s) with another user (like the old 'kibitz'
package). That's very handy for doing online tutorial and tech
support. You get a scrollback buffer and keyboard driven cut and
paste (with 'vi' inspired keybindings, you can even search back
through the current text and backscroll buffer).
</BLOCKQUOTE>
<BLOCKQUOTE>
Most of the URLs you see in the "Answer Guy" are pasted in from
a 'lynx' session using 'screen.'
</BLOCKQUOTE>
<BLOCKQUOTE>
If you forget to detach, you can use the <TT>-d</TT> option (shown above)
to remotely detach a session. You can use other options to select
from multiple 'screen' sessions that you have detached. You can
also run 'screen' commands to start up programs in their own
screen windows.
</BLOCKQUOTE>
<BLOCKQUOTE>
Oddly enough I've even found that I occasionally start or
re-attach to one 'screen' session on a remote system from within a
local 'screen' session. When I do this I use the <TT>-e</TT> option to
give that other (remote) screen session a different meta key.
(That's what I did in the sample command up there, with the
'<TT>-e^]]</TT>' setting it up so that the [Ctrl][Right Square Bracket]
was the meta key for that session. I did that while I was at
work. Before I left there I detached it. When I got home I
re-attached it to this 'xterm' (where I'm typing right now).
At first I just re-attached it with '<TT>-r</TT>' <TT>---</TT> but then I realized
that it was using my other meta key. So a detached again and
use '<TT>-r^aa</TT>' to reset those to the defaults (to which I'm more
accustomed).
</BLOCKQUOTE>
<BLOCKQUOTE>
Since I've introduced people at <A HREF="http://www.linuxcare.com/">Linuxcare</A> to this meme, I've
found that many of them have come to view their "sessions"
in a way that's similar to me. We maintain our state for
weeks or months by detaching, logging out, going elsewhere
(into X, out of X, from work, from home, etc), and always
re-attaching to our ongoing sessions. It's a whole different
way of using your computer.
</BLOCKQUOTE>
<BLOCKQUOTE>
So, try it. See if it does the trick for you.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 11 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/12"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 12 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Running out of Pseudo-tty's</H3>
<p><strong>From FRM on Fri, 14 Apr 2000
</strong></p>
<!-- ::
Running out of Pseudo-tty's
~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
hi,
</STRONG></P>
<P><STRONG>
my sunos 4.1.4 kernel is already configed for the max 256 pty's
(pseudo devices), but my users complain about running out of them
often. do i need to add files to the <TT>/dev</TT> directory or recompile the
kernel again...or????
</STRONG></P>
<P><STRONG>
any help much appreciated,
</STRONG></P>
<P><STRONG>
Randy A
Compaq Computer Corp.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
SunOS 4.1.4??? Hmm. Maybe you need an upgrade.
</BLOCKQUOTE>
<BLOCKQUOTE>
If 256 is the max for SunOS then I don't know what
you'd do to get around that. Under Linux the max is about 2048.
I suppose you could try making a bunch of additonal device nodes and
re-writing/compiling a bunch of your apps to open the new group of
nodes rather than the old ones.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'd say that SunOS 4.1.4 is showing its age. You might want to
consider switching to <A HREF="http://www.openbsd.org/">OpenBSD</A>, <A HREF="http://www.netbsd.org/">NetBSD</A>, or Linux. (Note:
SunOS was a BSDish UNIX, so you might be more comfortable with
it than you would be with Linux. I don't know about binary
compatability for your existing applications).
</BLOCKQUOTE>
<BLOCKQUOTE>
(Obviously I don't know much about SunOS. I'm the <EM>LINUX</EM>
Gazette Answer Guy and my experience with other forms of UNIX
is too limited and crufty to help you more than that).
</BLOCKQUOTE>
<!-- sig -->
<!-- end 12 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/13"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 13 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>XFree 4.0 and ":0.0 refused by server" Errors</H3>
<p><strong>From Alain Toussaint on Sun, 16 Apr 2000
</strong></p>
<!-- ::
XFree 4.0 and ":0.0 refused by server" Errors
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello Answerguy,
</STRONG></P>
<P><STRONG><CODE>
last week,i installed debian (a really base installation) on a factory
</CODE></STRONG></P>
<P><STRONG>
fresh disk and then set out to compile Xfree86 4.0 (i did not have X
previously),it did compile and work fine and i've been using it daily
with the startx command but wenesday this week,the hard disk on my
mother's computer died so i set out to build a linux boot disk
containing an X server so she could log in my system and continue to do
her work,i then tried xdm tonight (locally on my box first),xdm
loaded,took my credential but it did not open a session both as a user
(alain) and as root,i looked over in the .xession-errors file but i've
came to no conclusion,here's the content of the file:
</STRONG></P>
<pre><strong>> /home/alain/.xinitrc: exec: xfwm: not found
> /home/alain/.xinitrc: xscreensaver: command not found
> Xlib: connection to ":0.0" refused by server
> Xlib: Client is not authorized to connect to Server
> xrdb: Can't open display ':0'
> Xlib: connection to ":0.0" refused by server
> Xlib: Client is not authorized to connect to Server
> xrdb: Can't open display ':0'
> Xlib: connection to ":0.0" refused by server
> Xlib: Client is not authorized to connect to Server
> xrdb: Can't open display ':0'
</strong></pre>
<P><STRONG>
the first 2 errors don't worry me much (i have xfce installed and for
xscreensaver,i don't want it,since i'll install kde soon,i'm not pressed
to fix the xfce script that much),but the Xlib errors worry me quite a
bit,i then downloaded debian's xdm package and uncompressed it in a
temporary directory to compare the content of both our <TT>/etc/X11/xdm</TT>
directory (mine as well as the debian one) but i didn't find the root of
the problem,could you please help me ??
</STRONG></P>
<P><STRONG>
Thanks a lot
Alain Toussaint
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Hmmm. It sounds like a problem with your .Xauthority file.
You said you were using 'startx' before, and you're now trying to
use 'xdm'. What happens if you go back and try 'startx' again?
</BLOCKQUOTE>
<BLOCKQUOTE>
'xdm' has a different way of handling the 'xauth' files (using
the 'GiveConsole' and 'TakeConsole' scripts). Do a 'ps' listing
and see if you have a X server with arguments like:
</BLOCKQUOTE>
<blockquote><pre> X :0 -auth /var/xdm/Xauthority
</pre></blockquote>
<BLOCKQUOTE>
There's supposed to be a "GiveConsole" script that does
something like:
</BLOCKQUOTE>
<blockquote><pre> xauth -f /var/xdm/Xauthority extract - :0 | xauth -f ~$USER/.Xauthority merge -
</pre></blockquote>
<BLOCKQUOTE>
(Which extracts an MIT Magic Cookie or other access token from xdm's
Xauthority file and merges it into the "cookie jar" of your user.
This can, in principle, allow multiple accounts on a host or across a
network to access the same display server).
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, there are many other tricks that you can use to troubleshoot
similar problems.
</BLOCKQUOTE>
<BLOCKQUOTE>
I sometimes will start the X server directly
(bypassing 'xinit', 'startx', and 'xdm'); then switch back to one
of my text mode consoles (usually when I'm doing this I slap the old
& on the end of the X server's command line, if I forget then I do the
old [Ctrl]+[Z], 'bg' key and command). Next I 'export DISPLAY=:0'
(or :1, or whatever), and start an 'xterm &'
</BLOCKQUOTE>
<BLOCKQUOTE>
At that point I switch back to the X virtual console, and use the
resulting 'xterm' to work more magic. I may need to run my own
'xrdb' commands to merge in my own entries into the "X resources
database" (think of that as being your X server's "environment" <TT>---</TT>
a set of name/pattern and value pairs which are used by X client
programs to determine their default appearance, behaviour, etc).
</BLOCKQUOTE>
<BLOCKQUOTE>
I might also run a number of 'xset' commands to add to my
font path and play with other settings.
</BLOCKQUOTE>
<BLOCKQUOTE>
Doing this sort of "worm's eye" inching through the labyrinthine
X initialization process will usually isolate any problems that
you're having. It's playing with X enough to realize that it's
going through all of these steps that's so difficult.
</BLOCKQUOTE>
<BLOCKQUOTE>
I presume that you already know some of that (since you've already
fetched your own XFree 4.0 sources and built them). It's clear
that you're not a novice. Anyway, trying looking for .Xauthority
files. Allegedly if you simply delete them it opens the X server
wide open. I don't know if that's still true in XFree 4.0 but
it seemed to work on XFree 3.x the one time I tried it.
</BLOCKQUOTE>
<BLOCKQUOTE>
Good luck on that new X server. I haven't grabbed it to play with
it yet. I may wait until someone has a first cut of a <A HREF="http://www.debian.org/">Debian</A>
binary posted to "woody" (the current development/experimental
branch of the Debian project).
</BLOCKQUOTE>
<!-- sig -->
<!-- end 13 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/14"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 14 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>FW: Linux</H3>
<p><strong>Answered By Carl Davis on Mon, 17 Apr 2000
</strong></p>
<BLOCKQUOTE>
Thanks Jim, but I have solved the mystery................
</BLOCKQUOTE>
<BLOCKQUOTE>
The problem was that lilo does not like multiple "append" statements in
/etc/lilo.conf.
I fixed this by putting all the statements on the one append line,
separated by commas
and of cotatement2, statement3"
You may wish to add this snippet to the list of 2cent tips.
</BLOCKQUOTE>
<BLOCKQUOTE>
Regards
</BLOCKQUOTE>
<BLOCKQUOTE>
Carl Davis
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
<TT>-----Original</TT> Message-----
From: Carl Davis
Sent: Thursday, April 13, 2000 9:12 AM
To: '<A HREF="mailto:linux-questions-only@ssc.com"
>linux-questions-only@ssc.com</A>'
Subject: Linux
</STRONG></P>
<P><STRONG>
Hi Jim,
</STRONG></P>
<P><STRONG>
My compliments on a great column. I am running Linux (Mandrake 7) on a
Celeron 466
with 128 Mb RAM. My problem is I cannot persuade Linux to recognise more
than 64 Mb.
I have tried adding the following to lilo.conf: append="mem=128M", to
no avail. It still
comes up with only 64 Mb. Various flavours of Windoze can see the full
128 Mb. Any ideas
on what's going on here ?
</STRONG></P>
<P><STRONG>
Carl Davis
</STRONG></P>
<!-- end 14 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/15"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 15 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Determining the Type of Each Filesystem</H3>
<p><strong>From Scott on Mon, 17 Apr 2000
</strong></p>
<!-- ::
Determining the Type of Each Filesystem
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hello Answer guy,
</STRONG></P>
<P><STRONG>
The company I work for is going to start developing products for Linux soon.
Part of my preparation for this is to find out about Linux file systems.
One thing I haven't been able to find is how to find out what file system
each filesystem is using. Is there a command line utility that shows this?
How do I accomplish this programatically?
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Here's a simple shell script that will parse the output from the
'mount' command and isolate the device name and type for each mounted
filesystem:
</BLOCKQUOTE>
<blockquote><pre> mount | {
IFS=" (,)";
while read dev x mpoint x type opts; do
echo $dev $type;
done
}
</pre></blockquote>
<BLOCKQUOTE>
Notice at this is one of my common "data mill loops" <TT>---</TT> you
pipe the output of some command into a 'while read ...; do' loop
and do all your work in the subprocess. (When I'm teaching shell
scripting one of the first points I emphasize about pipes is
that a subprocess is implicitly made on one side of your pipe
operator, or the other).
</BLOCKQUOTE>
<BLOCKQUOTE>
We also see that I'm using the variable "$x" to eat extra
fields (the words "on" and "type" from 'mount"s output). Finally,
I'm using the shell-special IFS (inter-field separator) shell variable
to add the characters "(,)" to the list of field separators. This
means that each of the mount options <TT>---</TT> read-only vs read/write, nodev,
nosuid, etc <TT>---</TT> will be treated as a separate value. I could then,
within my 'while' loop, nest a 'for' loop to process each option on
each filesystem.
</BLOCKQUOTE>
<BLOCKQUOTE>
Creative use of IFS and these 'while read ...; do' loops can allow
us to do quite a bit directly in shell without resorting to 'awk'
and/or 'sed' to do simple parsing. Creative use of the 'case'
command (which uses glob patterns to match shell variable values)
is also useful and can replace many calls to 'grep'.
</BLOCKQUOTE>
<BLOCKQUOTE>
To get filesystem information from within a C program you'd
use the <TT>'statfs()</TT>' or <TT>'fstatfs()</TT>' system calls. Read the
'statfs(2)' or 'fstatfs(2)' man pages for details. Fetch
the util-linux sources and read the source code to the
'mount' and 'umount' commands for canonical examples of
the use of these and related sytem calls.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Any help is appreciated!
</STRONG></P>
<P><STRONG>
Scott C
</STRONG></P>
<!-- end 15 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 15 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Which filesystem?</H3>
<p><strong>From Andrew T. Scott on Mon, 17 Apr 2000
</strong></p>
<BLOCKQUOTE>
Jim Dennis wrote:
.....
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
and do all your work in the subprocess. (When I'm teaching shell
scripting ...
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Where can I sit in on this class?
</BLOCKQUOTE>
<BLOCKQUOTE>
-Andrew
</BLOCKQUOTE>
<EM>[ <BLOCKQUOTE>
Luckily for <A HREF="http://www.linuxcare.com/">Linuxcare</A>, its training department has a whole bunch of people
in it (wave hi, everybody!) because they've got Jim assigned to Do Cool Stuff
so he's not teaching right now. To be fair, they are only one among many
training providers for Linux; you can see a decent listing at
<A HREF="http://www.lintraining.com"
>http://www.lintraining.com</A> which redirects to Linsight's directory by
location and news on the subject.
</BLOCKQUOTE><P>-- Heather. ]</P></EM>
<!-- end 15 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/16"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 16 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Four Questions</H3>
<p><strong>From vg24 on Tue, 18 Apr 2000
</strong></p>
<!-- ::
Four Questions
~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi Answer Guy,
</STRONG></P>
<P><STRONG>
I had a few small questions about my <A HREF="http://www.slackware.org/">Slackware</A> Linux Box...
</STRONG></P>
<pre><strong>> (1) How do I get applications (like xmms) to startup automatically when I
> start FVWM95 with a 'startx' command? I'm hoping to achieve something
> similar to the "StartUp" menu in Win98.
</strong></pre>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Normally the 'startx' command is a shell script which looks for a
~/.Xclients file. That file is normally just another shell script.
It consists of a series of command that are started in the background
(using the trailing '&' shell operator), and one command that is
'exec"d (started in the foreground, and used to replace the shell
script's interpreter itself.
</BLOCKQUOTE>
<BLOCKQUOTE>
That foreground command is usually a window manager. In any event it
becomes the "session manager" for the X server. When the program exits,
the X server takes that as an indication that it should shutdown.
</BLOCKQUOTE>
<BLOCKQUOTE>
So, the answer to your question is to add the appropriate commands to
the .Xclients script in your home directory.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you are logging in via 'xdm' (a graphical login program) then it
may be that your system is looking for an ~/.Xsession script instead.
I usually just link to two names to one file. However, you certainly
could have completely different configurations based on whether you
logged in via 'xdm' or used the 'startx' command.
</BLOCKQUOTE>
<BLOCKQUOTE>
Of course this is just a matter of convention and local policy. As I
said, 'startx' itself is often a shell script. At some sites you use
'xinit' instead of 'startx' <TT>---</TT> and others there are different ways
to launch the X server and completely different ways to start the various
clients that run under it and control it.
</BLOCKQUOTE>
<BLOCKQUOTE>
You mentioned fvwm95. This is one of several variants of the fvwm
window manager. That's a traditional window manager. It just gives
you a set of menus (click on the "root window" which other windowing
systems call a "wallpaper" with each of your mouse buttons to see those),
and a set of window decorations (resizing bars, corners, and title bars
and buttons).
</BLOCKQUOTE>
<BLOCKQUOTE>
In recent years the open source community has created somewhat more
elaborate and "modern" graphical user environments like: <A HREF="http://www.kde.org/">KDE</A>, <A HREF="http://www.gnome.org/">GNOME</A>,
and GNUStep. These are whole suites of programs which can be combined
to provide the sort of look, feel and facilities that people have
come to expect from MacOS, MSWindows, etc.
</BLOCKQUOTE>
<BLOCKQUOTE>
If you really want something "Like the StartMenu" in Win'9x
then you may want to look at KDE or GNOME. These have "panels" which
provide a much closer analogue to the environment that you are
used to.
</BLOCKQUOTE>
<BLOCKQUOTE>
(Note: It is also possible to make either of these environments
look completely different than MS Windows. They both support
"themes" which are collections of settings, graphics, textures,
icons, even sounds, that customize the appearance and operation of
a Linux GUI. For more information and some nice screen shots of
the possibilities, take a look at <A HREF="http://www.themes.org"
>http://www.themes.org</A>).
</BLOCKQUOTE>
<blockquote><pre>> (2) I recently upgraded my kernel and filesystem binaries from a 2.034 kernel
> to a 2.2.13 kernel. I have XFree86 3.3.5 installed. I also upgraded
> my motherboard from an Intel P75 to an AMD K6-450. I kept the 32 Megs
> of RAM the same (a SIMM). However, now I notice that Netscape (and
> others?) grind my hard drive more when I attempt to open new
> browsers. I'm pretty sure I'm low on memory, but since I'm low in
> cash, I'd rather not invest in a DIMM. I didn't have any swap space
> set up, and don't now. I actually upgraded from netscape 4.1 to 4.6.
> Could this be the problem?
</pre></blockquote>
<BLOCKQUOTE>
Hmmm. Certainly it is likely that Netscape 4.6 is taking up more
memory than 4.1. However I note an inconsistency here. You say you
didn't have any swap space. If that was true then your shortage of
memory should have caused failures when trying to launch programs
<TT>---</TT> rather than the increased disk thrashing. I think it's likely
that you actually do have some swap space. You can use the following
command to find out what swap partitions and files are active on your
system:
</BLOCKQUOTE>
<blockquote><pre> cat /proc/swaps
</pre></blockquote>
<BLOCKQUOTE>
... which should provide a list of any swap space that is in use.
Of course the 'free' command will also summarize the available and
used swap space. However, the <TT>/proc/swaps</TT> "psuedo-file" (node) will
actually tell you "where" the swap is located.
</BLOCKQUOTE>
<BLOCKQUOTE>
Get the extra memory. It's not that expensive and it is the
best performance upgrade that you can make for your system.
</BLOCKQUOTE>
<blockquote><pre>> (3) I was running GNOME/enlightenment, but the
> GNOME panel would never come up automatically. How can I get the
> GNOME panel to initialize, along with the GNOME file manager, (so
> I can have the cool desktop icons)?
</pre></blockquote>
<BLOCKQUOTE>
Hmmm. I'm not much of a GNOME or KDE person. Do you have the rest
of GNOME installed? enlightenment is a window manager. It was the
default window manager for GNOME <TT>---</TT> but they are separate projects.
So, do you have GNOME installed? Are you starting 'gnome-session'
(running it from your .Xclients/.Xsession script as described above)?
</BLOCKQUOTE>
<BLOCKQUOTE>
Try that. I think there are now a couple of window managers that
implement the GNOME hints and APIs <TT>---</TT> so you don't have to use
enlightenment.
</BLOCKQUOTE>
<blockquote><pre>> (4) Lastly, I wanted to trim my syslog and wtmp files. Is there any
> way I can do this? Can I just tail -30 the last 30 lines into a
> new file? I think the wtmp is binary, so any ideas?
</pre></blockquote>
<BLOCKQUOTE>
You are correct. the wtmp and utmp files are binary. They cannot be
trimmed with simple shell scripts and text utilities. The utmp file
shouldn't grow (by much), however the wtmp will grow without bound.
However, the usual way of dealing with wmtp is to simply rename the
current one, 'touch' a new one and forget about it.
</BLOCKQUOTE>
<BLOCKQUOTE>
That's fine for wtmp.
</BLOCKQUOTE>
<BLOCKQUOTE>
However, DON'T try that with the <TT>/var/log/messages</TT> or other
syslog files. Those are held up. If you rename them or
delete them, they continue to grow.
</BLOCKQUOTE>
<BLOCKQUOTE>
Yes! You read that correctly, if you remove a file while some
process has it open, then you haven't freed up any disk space!
That's because the 'rm' command just does an <TT>'unlink()</TT>' system call.
When the last link to a file is removed, AND THE FILE IS NOT OPEN,
then the filesystem drivers perform some housekeeping to mark the
associated inode(s) as available, and to add all the associated data
blocks to the filesystem's "free list." If the file is still open
then that housekeeping is deferred until it is closed.
</BLOCKQUOTE>
<BLOCKQUOTE>
So the usual way to trim syslog files (since syslog stays
running all the time, and keeps it's files open under normal
circumstances) is to to 'cp <TT>/dev/null</TT>' or 'echo "" > ' to
truncate them. Another common practice is to remove the
files and use the 'kill <TT>-HUP</TT> $(cat <TT>/var/run/syslog.pid</TT>)' command
to force the syslogd to re-read its configuration file,
close all its files, and re-open them.
</BLOCKQUOTE>
<BLOCKQUOTE>
However, none of that should be necessary. Every other
general purpose distribution has some sort of log rotation
scripts that are run out of 'cron.' I'm pretty sure that
Patrick (Volkerding, principle architect of Slackware) didn't
neglect that.
</BLOCKQUOTE>
<BLOCKQUOTE>
(I should point out that I haven't used Slackware in several
years. Nothing against it. I just have too few machines and
too little time).
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Thanks for any help you can provide!
Vikas Gupta
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Well, I think this should nudge you in the right directions.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 16 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/17"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 17 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>G-Kermit: The GPL Kermit Transfer Package</H3>
<p><strong>From Deepu Chandy Thomas on Tue, 18 Apr 2000
</strong></p>
<!-- ::
G-Kermit: The GPL Kermit Transfer Package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Sir,
</STRONG></P>
<P><STRONG>
I wanted to use the kermit protocol with minicom. I use rz sz for
zmodem. Where do I get the files for kermit?
</STRONG></P>
<P><STRONG>
Regards,
Deepu
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Look at <A HREF="http://www.columbia.edu/kermit"
>http://www.columbia.edu/kermit</A> for canonical information
about all the official Kermit packages, and at:
<A HREF="http://www.columbia.edu/kermit/gkermit.html"
>http://www.columbia.edu/kermit/gkermit.html</A> for information
specifically about the GPL kermit package (which implements
the file transfer protocol without the scripting, dialing and
other features of C-Kermit).
</BLOCKQUOTE>
<BLOCKQUOTE>
(Note: C-Kermit can also be used as a 'telnet' or 'rsh' client
with a scripting language, and many other useful features. It
is a full featured communications package. Recent versions have
even added Kerberos support!)
</BLOCKQUOTE>
<!-- sig -->
<!-- end 17 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/18"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 18 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
><TT>./script:</TT> No such file or directory</H3>
<p><strong>From Alex Brak on Fri, 14 Apr 2000
</strong></p>
<!-- ::
<TT>./script:</TT> No such file or directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
I'm having a problem with my linux box, and can't for the life of me
figure out what's wrong. Here are the symptoms:
</STRONG></P>
<pre><strong>> server:~/scripts$ whoami
> alex
> server:~/scripts$ ls -al ./script
> - -rwxr----- 1 alex home 43747 Apr 10 22:31 ./script*
> server:~/scripts$ ./script
> bash: ./script: No such file or directory
</strong></pre>
<P><STRONG>
(note: the '*' at the tail end of the file listing is merely a symbol
specifying that its an executable file. this is not part of the
filename)
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Technically that "file type marker" is the result of using the
<TT>-F</TT> option to 'ls'
</BLOCKQUOTE>
<BLOCKQUOTE>
The most likely cause of this problem is the #! (shebang) line
that should be at the beginning of your script. If that is
incorrect then it is common to get this error, your shell is
telling you that it can't find the script's interpreter.
</BLOCKQUOTE>
<BLOCKQUOTE>
If '<TT>./script</TT>' was a binary executable thenI'd also suggest looking
for missing shared libraries. In fact, it's possible that your
shebang line is pointing to some interpreter (<TT>/usr/local/ksh</TT> or
something) which is present, and executable, but is missing some
shared library. It is even possible that a shared library depends
on another, and that this is what is missing.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
As you can see from the above, I'm the owner of the file in question,
and have execute permission on it. The file exists. Yet bash claims
the file is not there. I've tried with shells other than bash (every
other shell available on my system, including csh, tcsh, ash, and
zsh). I've even tried executing the command
as root, to no avail.
</STRONG></P>
<P><STRONG>
This exact same problem has arisen before with another script I
wrote. I couldn't fix it then, either.
</STRONG></P>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
Check your shebang line. It should read something like:
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<blockquote><pre>#!/bin/sh
</pre></blockquote>
<BLOCKQUOTE>
Note: there are NO SPACES in this line. Do NOT put a space
between the #! and the interpreter's name.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I'd like to also note that this problem arises intermittently: just
after finishing ~/scripts/script I created another script named
"test", did chmod u+x on it and it executed just fine.
~scripts/script still refuses to execute, though :( Please note that I've
tried renaming the file. I've also tried moving it to another location on
the directory tree. None of these have helped.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
A text file without any shebang line, which is marked as executable
will be executed through some magic that is dependent on the shell
wfrom which it is being invoked.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'll probaby get this wrong in the details but the process works
something like this:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
You issue a command. The shell tries to simply<TT> exec()</TT> it (after
performing the command line parsing necessary to expand any file
"globs" and replace any shell variables, command substitution
operators, parameter expansion, etc). If that execution fails the
shell may attempt to call it with $SHELL <TT>-c</TT> (or it might do something
a bit different: that seems to be shell dependent).
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
Notice that the behaviour in the first case is well-defined. Linux
has a binfmt_script module (usually compiled/linked statically into
your kernel) which handles a properly formatted shebang line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I have not experienced any other problems with my system that I'm
aware of. Does anyone know what could be causing this, or how to fix
the problem?
</STRONG></P>
<P><STRONG>
I'm running linux 2.2.14 on my Pentium 120, with a <A HREF="http://www.slackware.org/">Slackware</A>
distribution. The file in question exists on the root partition, in
an ext2 file system, which the kernel supports. If there's any other
relevant information I have provided, please don't hesitate to ask.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
If you were getting "operation not permitted" I'd suggest checking your
mount options to see if the filesystem was mounted 'noexec' (which
would be a very badd idea for your root fs). If you were getting
a message like "cannot execute binary" then I'd think that maybe
you had an old a.out binary and a kernel without the a.out binfmt
support.
</BLOCKQUOTE>
<BLOCKQUOTE>
But I'm pretty sure that you're having a problem with your shebang
line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Thanks,
Alex
</STRONG></P>
<!-- sig -->
<!-- end 18 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 18 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
><TT>./script:</TT> No such file or directory</H3>
<p><strong>From Alex Brak on Sun, 16 Apr 2000
</strong></p>
<BLOCKQUOTE>
Sport on. Many thanks.
</BLOCKQUOTE>
<BLOCKQUOTE>
Alex
</BLOCKQUOTE>
<BLOCKQUOTE>
<TT>-----Original</TT> Message-----
From: Jim Dennis [mailto:<A HREF="mailto:jimd@starshine.org"
>jimd@starshine.org</A>]
Sent: Saturday, 15 April 2000 9:07 AM
To: Alex Brak
Cc: <A HREF="mailto:star@starshine.org"
>star@starshine.org</A>; <A HREF="mailto:jdennis@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com"
>jdennis@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com</A>; <A HREF="mailto:tdavey@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com"
>tdavey@<A HREF="http://www.linuxcare.com/">Linuxcare</A>.com</A>;
<A HREF="mailto:bneely@linuxcare.com"
>bneely@linuxcare.com</A>; <A HREF="mailto:sg@linuxcare.com"
>sg@linuxcare.com</A>
Subject: Re: shell cannot see an existing file
</BLOCKQUOTE>
<!-- ::
<TT>./script:</TT> No such file or directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
I'm having a problem with my linux box, and can't for the life of me
figure out what's wrong. Here are the symptoms:
</STRONG></P>
<pre><strong>> server:~/scripts$ whoami
> alex
> server:~/scripts$ ls -al ./script
> - -rwxr----- 1 alex home 43747 Apr 10 22:31 ./script*
> server:~/scripts$ ./script
> bash: ./script: No such file or directory
</strong></pre>
<P><STRONG>
(note: the '*' at the tail end of the file listing is merely a symbol
specifying that its an executable file. this is not part of the
filename)
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Technically that "file type marker" is the result of using the
<TT>-F</TT> option to 'ls'
</BLOCKQUOTE>
<BLOCKQUOTE>
The most likely cause of this problem is the #! (shebang) line
that should be at the beginning of your script. If that is
incorrect then it is common to get this error, your shell is
telling you that it can't find the script's interpreter.
</BLOCKQUOTE>
<BLOCKQUOTE>
If '<TT>./script</TT>' was a binary executable thenI'd also suggest looking
for missing shared libraries. In fact, it's possible that your
shebang line is pointing to some interpreter (<TT>/usr/local/ksh</TT> or
something) which is present, and executable, but is missing some
shared library. It is even possible that a shared library depends
on another, and that this is what is missing.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
As you can see from the above, I'm the owner of the file in question,
and have execute permission on it. The file exists. Yet bash claims
the file is not there. I've tried with shells other than bash (every
other shell available on my system, including csh, tcsh, ash, and
zsh). I've even tried executing the command
as root, to no avail.
</STRONG></P>
<P><STRONG>
This exact same problem has arisen before with another script I
wrote. I couldn't fix it then, either.
</STRONG></P>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
Check your shebang line. It should read something like:
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<blockquote><pre>#!/bin/sh
</pre></blockquote>
<BLOCKQUOTE>
Note: there are NO SPACES in this line. Do NOT put a space
between the #! and the interpreter's name.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I'd like to also note that this problem arises intermittently: just
after finishing ~/scripts/script I created another script named
"test", did chmod u+x on it and it executed just fine.
~scripts/script still refuses to execute, though :( Please note that I've
tried renaming the file. I've also tried moving it to another location on
the directory tree. None of these have helped.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
A text file without any shebang line, which is marked as executable
will be executed through some magic that is dependent on the shell
wfrom which it is being invoked.
</BLOCKQUOTE>
<BLOCKQUOTE>
I'll probaby get this wrong in the details but the process works
something like this:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
You issue a command. The shell tries to simply<TT> exec()</TT> it (after
performing the command line parsing necessary to expand any file
"globs" and replace any shell variables, command substitution
operators, parameter expansion, etc). If that execution fails the
shell may attempt to call it with $SHELL <TT>-c</TT> (or it might do something
a bit different: that seems to be shell dependent).
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
Notice that the behaviour in the first case is well-defined. Linux
has a binfmt_script module (usually compiled/linked statically into
your kernel) which handles a properly formatted shebang line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I have not experienced any other problems with my system that I'm
aware of. Does anyone know what could be causing this, or how to fix
the problem?
</STRONG></P>
<P><STRONG>
I'm running linux 2.2.14 on my Pentium 120, with a <A HREF="http://www.slackware.org/">Slackware</A>
distribution. The file in question exists on the root partition, in
an ext2 file system, which the kernel supports. If there's any other
relevant information I have provided, please don't hesitate to ask.
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
If you were getting "operation not permitted" I'd suggest checking your
mount options to see if the filesystem was mounted 'noexec' (which
would be a very badd idea for your root fs). If you were getting
a message like "cannot execute binary" then I'd think that maybe
you had an old a.out binary and a kernel without the a.out binfmt
support.
</BLOCKQUOTE>
<BLOCKQUOTE>
But I'm pretty sure that you're having a problem with your shebang
line.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Thanks,
Alex
</STRONG></P>
<!-- sig -->
<!-- end 18 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/19"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 19 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>hello</H3>
<p><strong>From Credit Future Commercial MACAU Company on Wed, 5 Apr 2000
</strong></p>
<BLOCKQUOTE>
Hello sir
</BLOCKQUOTE>
<BLOCKQUOTE>
I installed red hat 6.1 on my system but it does not display more =
</BLOCKQUOTE>
<BLOCKQUOTE>
then 256 colours although my vga card is a 16 MB vodoo why is that can =
you help me out here ???I have tried startx <TT>-bpp16</TT> but still my pics =
"jpegs , bmp " qualities isnt fine !!! & are displayed in dots same pic =
in windows look good .
</BLOCKQUOTE>
<BLOCKQUOTE>
thanksfaisal
</BLOCKQUOTE>
<!-- end 19 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 19 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>hello</H3>
<p><strong>From Heather on Wed, 5 Apr 2000
</strong></p>
<P><STRONG>
Hello sir
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Heather isn't a masculine name in the U.S. I'll assume this is intended
for the Answer Guy column, and give a first shot at answering it.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
I installed red hat 6.1 on my system but it does not display more then
</STRONG></P>
<P><STRONG>
256 colours although my vga card is a 16 MB vodoo why is that can you help
me out here ???I have tried startx <TT>-bpp16</TT> but still my pics "jpegs , bmp "
qualities isnt fine !!! & are displayed in dots same pic in windows look
good .
thanksfaisal
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
You have not specified what resolution under MSwin had the qualities you seek.
Under X, you must run the correct video server to match your card if you want
best performance, but you can nearly always get the screen <EM>working</EM> with a
lesser server.
</BLOCKQUOTE>
<BLOCKQUOTE>
The VGA16 server only provides 256 color service. If this is what you are
stuck at, you might be using this. Or, your <TT>/etc/X11/XF86Config</TT> file may
be telling it to default to this level <TT>-</TT> the command to change the default
is
startx <TT>--</TT> <TT>-bpp</TT> 16
</BLOCKQUOTE>
<BLOCKQUOTE>
with the space. Also, startx is a shell script, and launches a particular
server... usually <TT>/usr/X11R6/bin/X</TT> which itself is a link to the real one...
and so, you may be running a server you didn't intend.
</BLOCKQUOTE>
<BLOCKQUOTE>
Good luck with your JPEGs.
</BLOCKQUOTE>
<!-- end 19 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 19 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>hello again</H3>
<p><strong>From fai, Answered By Heather Stern on Fri, 7 Apr 2000
</strong></p>
<P><STRONG>
Thanks for the help it worked Finally !!!!
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Glad to hear it worked for you. Sorry I wasn't able to reply in
email in a timely fashion <TT>-</TT> publishing deadlines, you know.
</BLOCKQUOTE>
<P><STRONG><IMG SRC="../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Can you help me a bit more while telling me that i want to start this
command by default startx <TT>--</TT> <TT>-bpp</TT> 32 how can i do this ????
</STRONG></P>
<P><STRONG>
thanks
Faisal
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
One way would be to creat .xserverrc in your own home directory;
you'd have to specify your X server, but then you could pass it
parameters too:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
<TT>/usr/X11R6/bin/XF86_SVGA</TT> <TT>-bpp</TT> 32
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
Assuming that's the right server for you, of course. If startx
is just plain "getting it right" except for that itty bitty detail
of colordepth, you could instead create a bash alias or put a one-liner
shell script in your path. I like to keep such personal scripts
in ~/bin (that's bin under my home directory). name it something
much shorter like myX and save some typing too.
</BLOCKQUOTE>
<EM>[ <BLOCKQUOTE>
So where was Jim on this one? Well, he liked my answer, and was
busy with other questions and stuff to do.
</BLOCKQUOTE><P>-- Heather. ]</P></EM>
<!-- end 19 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/20"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 20 -->
<H3 align="left"><img src="../gx/dennis/bbubble.gif"
height="50" width="60" alt="(!) " border="0"
>Shutting Down the Ping Daemon: Revised</H3>
<p><strong>Answered By Nadeem Hasan on Mon, 03 Apr 2000
</strong></p>
<!-- ::
Shutting Down the Ping Daemon: Revised
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
This is in reference to above question in "The answer Guy"
and its answer. The use of ipchains/ipfwadm is a bit of an
overkill to achieve this. The better way is to simply use
the following as root:
</STRONG></P>
<P><STRONG><CODE>
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
</CODE></STRONG></P>
<P><STRONG>
This should cause the kernel to ignore all the ping ICMP
requests.
</STRONG></P>
<P><STRONG>
Cheers,
--
Nadeem
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Just when you think you know everything.
</BLOCKQUOTE>
<!-- end 20 -->
<!-- . . . . . . . . . . . . . . . . . . . -->
<HR WIDTH="40%" ALIGN="center">
<!-- begin 20 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Revisionist Requests</H3>
<p><strong>From Nadeem Hasan on Tue, 11 Apr 2000
</strong></p>
<!-- ::
Revisionist Requests
~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Hi,
</STRONG></P>
<P><STRONG>
The Gazette still has the old description about disabling
ping echo responses. Does that mean its better than what
I suggested?
</STRONG></P>
<P><STRONG>
Nadeem
<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"
>
I don't have the power to change what I've published in previous
months. Your (better) suggestion on how to disable the Linux
kernel's ICMP echo responses (to 'ping' requests) should appear in
next month's issue.
</BLOCKQUOTE>
<BLOCKQUOTE>
Now, what was that magic <TT>/proc</TT> node again?
</BLOCKQUOTE>
<BLOCKQUOTE>
Ahh, here it is:
</BLOCKQUOTE>
<blockquote><pre> echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
</pre></blockquote>
<BLOCKQUOTE>
... I'd never remember that, but the node is there and I'd
recognize the meaining from the name. (So it's in my passive
rather than active vocabulary).
</BLOCKQUOTE>
<BLOCKQUOTE>
There are some other interesting nodes there <TT>---</TT> and I think
the one about "icmp_echo_ignore_broadcasts" looks useful.
</BLOCKQUOTE>
<BLOCKQUOTE>
It would be neat if someone wanted to write up a HOWTO on
"Useful <TT>/proc</TT> Tips and Tricks" (hint, hint). I've done some
performance tuning by tweaking and playing with some of the
entries under <TT>/proc/sys/vm</TT> (the virtual memory sysctl's), and
I know others have even done better than I could (back at
<A HREF="http://www.linuxcare.com/">Linuxcare</A>, I had to call on our <EM>real</EM> experts to help me out
awhile back for one gig).
</BLOCKQUOTE>
<BLOCKQUOTE>
I guess the tips would fall into two or three general categories:
robustness, security, and performance. For example the
<TT>/proc/sys/kernel/cap-bound</TT> (bounding capabilities set) can be
modified to secure some facilities even from a subverted 'root'
process (like the BSD securelevel features), and I guess that
<TT>/proc/sys/vm/overcommit_memory</TT> might allow one to prevent the
system from overcommit (providing for more robust operation
at the expense of reducing our capacity to run multiple
concurrent "memory hogs" that ask for more core than they actually
need).
</BLOCKQUOTE>
<BLOCKQUOTE>
A good HOWTO would be organized by objective/situation
(Increasing File Server Performance, Limiting Damage by
Subverted and Rogue Processes (Crackers), etc) and would include
notes on the tradeoffs that each setting entails. For example
one might disable ICMP response (for security?) but one should
be aware that anyone who has a legimate reason to access ANY
other service on your system might want to 'ping' it first to
ensure that it is reachable before they (or their programs) will
attempt to access any other service on it. (In other words it
makes no sense to disable ICMP responses on a web, mail, DNS,
FTP or other public server).
</BLOCKQUOTE>
<BLOCKQUOTE>
Unfortunately I don't have the time, nor nearly enough expertise
to write this. There are already some notes in the Linux kernel
source trees under <TT>/usr/src/linux/Documentation/sysctl/</TT> and I
remember that someone is working on a tool to automate some of
this PowerTweak/Linux (<A HREF="http://linux.powertweak.com/news.html"
>http://linux.powertweak.com/news.html</A>)
comes to mind.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, enough on that.
</BLOCKQUOTE>
<!-- end 20 -->
<!-- .~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~.~~. -->
<A NAME="tag/21"><HR WIDTH="75%" ALIGN="center"></A>
<!-- begin 21 -->
<H3 align="left"><img src="../gx/dennis/qbubble.gif"
height="50" width="60" alt="(?) " border="0"
>Remotely Executing Graphic Apps</H3>
<p><strong>From Apichai T. on Mon, 03 Apr 2000
</strong></p>
<!-- ::
Remotely Executing Graphic Apps
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG>
Dear sir,
</STRONG></P>
<P><STRONG>
May I ask for your advice , the steps to set up linux box to be
possible to remotely execute graphical applications.
</STRONG></P>
<P><STRONG>
Thanks and Best regards,
Jing
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../gx/dennis/bbub.gif" ALT="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
Here's a couple of HOWTO and mini-HOWTO links:
</BLOCKQUOTE>
<BLOCKQUOTE><DL><DT>
Remote X Apps mini-HOWTO
<DD><A HREF="http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html"
>http://www.linuxdoc.org/HOWTO/mini/Remote-X-Apps.html</A>
</DL></BLOCKQUOTE>
<BLOCKQUOTE>
(I've copied it's author, Vincent Zweije, on this reply).
</BLOCKQUOTE>
<BLOCKQUOTE>
I don't recommend using his example shell script from section 6.2:
</BLOCKQUOTE>
<blockquote><pre>!/bin/sh
cookie=`mcookie`
xauth add :0 . $cookie
xauth add "$HOST:0" . $cookie
exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"
</pre></blockquote>
<BLOCKQUOTE>
The problem here is that the cookie variable is exposed on these
command lines (which is world readable via <TT>/proc</TT> and the 'ps'
command). It may also be exposed if it is exported to the
environment. Safe handling must be done through pipes or files
(or file descriptors). Note that the window of exposure is small
<TT>---</TT> but unnecessary. Read the 'xauth' man page for more details.
</BLOCKQUOTE>
<BLOCKQUOTE>
Better yet: Use ssh! (Read Vincent's HOWTO for more on that).
</BLOCKQUOTE>
<BLOCKQUOTE>
I also notice that Vincent doesn't distinguish between the session
manager and the window manager. In practice they are almost
always the same program. However here's the difference:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQuote>
The session manager is the one program that is started in the
foreground during the startx or xinit process. The X server
tracks this one process ID. When it dies, the X server takes
that as a signal to shutdown. Any program (an 'xterm', a copy
of 'xclock' or whatever) can be the session manager.
</BLOCKQuote></BLOCKQUOTE>
<BLOCKQUOTE>
The window manager is the program that receives events for the
"root window" (the X Windows System term for what other
windowing systems call the "wall paper" or "desktop" or
"backdrop"). There's also quite a bit more to what the window
manager does. You can only run one window manager on any X
server at any time. Window managers (can?) implement a number
of APIs that are unique to them <TT>---</TT> so you can just use "any"
X program as your window manager.
</BLOCKQUOTE>
<BLOCKQUOTE>
It's a subtle distinction since almost everybody uses their window
manager as their session manager.
</BLOCKQUOTE>
<BLOCKQUOTE>
Note: If you're troubleshooting X connections keep in mind that
the client must be able to connect to the server via the
appropriate socket. For example, to connect to the server on :0
(localhost/unix:0) the program must be able to access the UNIX
domain socket (usually in sockets that are located in <TT>/tmp/.X11-unix/</TT>)
Obviously<TT> chroot()</TT> jails could interfere with that (though
localhost:0, which is the same as localhost/tcp:0 should still
work).
</BLOCKQUOTE>
<BLOCKQUOTE>
A subtle and rare problem might be if someone were to try running
X after building a kernel without support for UNIX domain sockets.
It's possible to build a Linux kernel with full support for TCP/IP
and yet leave out the support for UNIX domain sockets.
</BLOCKQUOTE>
<BLOCKQUOTE>
Obviously when looking at Internet domain sockets (TCP/IP) any of
the usual routing, addressing, and packet filtering issues can
interfere with your clients attempts to connect to port 6000
(or 6001, 6002, etc) on the X server host.
</BLOCKQUOTE>
<BLOCKQUOTE>
For a little more on remote access to X server look at VNC
(Virtual Network Computing from AT&T Laboratories Cambridge:
<A HREF="http://www.uk.research.att.com/vnc"
>http://www.uk.research.att.com/vnc</A>) (VNC was originally
developed at the Olivetti Research Laboratory, which was later
acquired by AT&T).
</BLOCKQUOTE>
<BLOCKQUOTE>
You don't need this to just run X clients on your X server.
However, it's useful to learn about VNC in case you need some of
the special features that it provides.
</BLOCKQUOTE>
<BLOCKQUOTE>
Another good site for finding links to lots of information about
X is at Kenton Lee's "X Sites" (<A HREF="http://www.rahul.net/kenton/xsites.html"
>http://www.rahul.net/kenton/xsites.html</A>)
There are about 700 links located there!
</BLOCKQUOTE>
<BLOCKQUOTE>
Note that while X is currently the dominant windowing system for
Linux there are other efforts out there including "Berlin"
(<A HREF="http://www.berlin-consortium.org"
>http://www.berlin-consortium.org</A>) and the "Y Window System"
(<A HREF="http://www.hungry.com/products/Ywindows"
>http://www.hungry.com/products/Ywindows</A>). I don't know how
these projects are going. I see that the Berlin home pages have
been updated recently while the Y Window System pages seem to
have been stale since March of 1998.
</BLOCKQUOTE>
<BLOCKQUOTE>
Anyway, good luck.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 21 -->
<H4>"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <hr> <P>
<!-- QUICK TIPS SECTION ================================================== -->
<center>
<H1><A NAME="tips"><IMG ALIGN=MIDDLE ALT="" SRC="../gx/twocent.gif">
More 2¢ Tips!</A></H1> <BR>
Send Linux Tips and Tricks to <A HREF="mailto:gazette@ssc.com">
gazette@ssc.com
</A></center>
<!-- BEGIN tips -->
<P> <hr> <P>
<!--================================================================-->
<a name="wheel"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">mouse wheel and netscape
</FONT> </H3>
Mon, 03 Apr 2000 14:03:18 -0500
<BR>From: Greg Walker <<A HREF="mailto:greg.walker@vanderbilt.edu">greg.walker@vanderbilt.edu</A>>
<P> This configuration may not be immediately obvious to the unseasoned
Linux user, therefore, I thought it would make a good two cent tip.
Furthermore, the information does not seem readily available (at
least I had trouble finding it).
<P> To enable the mouse wheel, place the following line in XF86Config
under the pointer section
<PRE>
ZAxisMapping 4 5
</PRE>
<P> This will allow emacs, xterm, ... to receive mouse wheel events. For
netscape, also add the following lines to .Xdefaults (be sure there
is only a newline after the "\" that ends a line.
<PRE>
Netscape*globalTranslations: #override \
<Btn5Up>: LineDown() \n\
<Btn4Up>: LineUp() \n
</PRE>
<P> <hr> <P>
<!--================================================================-->
<a name="allfilesys"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">2cent tip
</FONT> </H3>
Thu, 13 Apr 2000 01:17:07 +0200
<BR>From: David Pravec <<A HREF="mailto:dave@anapol.cz">dave@anapol.cz</A>>
<P> Hello,
For those who are changing HDDs very often, here is small ugly
but working utility which I wrote.
It detects filesystem types of all accessible partitions and
checks/mounts them in folders named after device (hda7,hdb1,hdb3,sd1,...).
<P> So you will never have to write sequences of fdisk,fsck,mount,df...
<P> <A HREF="misc/tips/allfilesys.sh.txt">allfilesys</A>
<P> <hr> <P>
<!--================================================================-->
<a name="traceroute"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
<FONT COLOR="navy">Traceroute Resources
</FONT> </H3>
Thu, 20 Apr 2000 22:00:27 +0300
<BR>From: Rafael Stekolshchik <<A HREF="mailto:klivlend@internet-zahav.net">klivlend@internet-zahav.net</A>>
<P> Hello,
<P> You maybe interested in checking the site
"Tracerote Lists by States. Backbone Maps List"
<A HREF="http://cities.lk.net/trlist.html">http://cities.lk.net/trlist.html</A>
<P> You can find there many links to the traceroute resources
sorted by the next items:
<UL>
<LI> Traceroute List by States
<LI> Traceroute against Spam
<LI> Other Traceroute Lists
<LI> Traceroute and other tools
<LI> Traceroute Analysis
</UL>
<P> Other thing is the List of Backbone Maps, sorted by Geographical
Location, also some other info about backbones.
<!-- END tips -->
<P> <hr> <P>
<!--================================================================-->
<H4><font color="maroon">
Tips in the following section are answers to questions printed in the Mail
Bag column of previous issues.
</font></H4>
<!-- BEGIN tips.answers -->
<P> <hr> <P>
<!--================================================================-->
<a name="linux_from_nt"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">About Linux
</FONT> </H3>
Tue, 4 Apr 2000 10:42:08 +0300 (EET DST)
<BR>From: Marius ANDREIANA <<A HREF="mailto:rocky@ss.pub.ro">rocky@ss.pub.ro</A>>
<P> Hi
<BLOCKQUOTE>
<P> I would really like to see case studies on switching to Linux form other platforms.
</BLOCKQUOTE>
Recently there was an article in LG, about a big polish hotel which
did that and pretty happy about it. Check it out.
<BLOCKQUOTE>
<P> We currently use Windows NT Terminal Server Edition. How hard would it be to go to Linux?
</BLOCKQUOTE>
You'll have to learn a little. On NT you click several times, use some
wizards, reboot from time to time and everyhitng it's fine. If
it isn't, reinstall and it will be.
Using Linux means you also know what you are doing. You'll click
more times, even use the keyboard :), ask on irc/mail list/news about
something which you can't figure out etc. But you'll have a
strong, performant, secure platform.
<BLOCKQUOTE>
<P> - We have two TSE servers with approximately 30 users each logged in on average. In total, we have about 130 users but
it is a manufacturing plant and many people share terminals.
</BLOCKQUOTE>
sounds to me like a perfect case for Linux :)
<BLOCKQUOTE>
<P> - We use Citrix Metaframe, for Load Balancing and failover. Is there a product for Linux that offers this option?
</BLOCKQUOTE>
Ah ! The Windows world, with lots of _great_ products, which improve
performance of your system, maintain it etc etc.
<P> You don't need these on Linux, because it does it by itself.
With under 200 users, I don't think you'll need more than one server.
Sure, that server won't be a Pentium PC. I'm not into hardware,
can't say too much here, but there are many options.
<BLOCKQUOTE>
<P> - Dependability. I have to reboot my TSE servers once a week. Last week a new HP printer driver caused about 40 blue
screens of death before we figured out what was going on.
</BLOCKQUOTE>
I've heard that on Windows 2000 presentation by Bill Gates, he outlined
that there were machines running for even 90 days without a reset.
WOW ! ( not to mention the _new_ micro$oft _invention_, the
symbolic link )
<BLOCKQUOTE>
<P> Will Linux be better?
</BLOCKQUOTE>
You bet. See more articles about introduction to Linux etc.
Once you start using it, you'll love it. Try and see ;)
<P> Recently we installed ( at <A HREF="http://www.lug.ro">www.lug.ro</A> ) php, postgresql, configured
the web server (apache) without rebooting and remotely.
And no wizards, just the shell, from an old university
text terminal. It took about 15 minutes untill I had it running.
I'd say that's cool, isn't it ?
<P> About the uptime, here's the output of the uptime command on a
sever here in ROmania :
<PRE>
avva:~$ uptime
10:22am up 435 days, 17:27, 7 users, load average: 1.16, 1.10, 1.02
avva:~$
</PRE>
<P> That ain't much, check
<A HREF="http://www.uptimes.net">www.uptimes.net</A> for better results
<BLOCKQUOTE>
<P> - Office productivity software. If we are used to MS Office, what will it be like going to something like star-office?
</BLOCKQUOTE>
Better :) I use it from time to time to make some charts, short
paper works etc. If you're really into publishing, LaTeX is the
answer. And don't forget about the free great database engine,
PostgreSQL. (you don't keep data in an Excel sheet, don't you ?)
How about a web/desktop interface for it ? No problem !
<BLOCKQUOTE>
<P> - Anti-virus programs? Is there an antivirus program to scan mail stores (sendmail POP server)?
</BLOCKQUOTE>
If you use Linux and no windows at all, you won't need that.
Besides being harder to infect a Linux system because of file perimisions
and ownership, there's a problem with anti-viruses. The viruses must
appear first, and _later_ the anti-viruses. I can't afford to wait
that delta t, both at home and at work, so I use Tripwire, an 'utility'
which scans your filesystem and based on the rules you define, makes
a database of their CRCs or something like that. If a file get's modified
you are notified acording to the rules. There's a free version of it and
a better commercial one. (see their website for more info). I use it as
an antivirus, but it's for network security.
<BLOCKQUOTE>
<P> -Security. How good is Linux at keeping users honest? With TSE you can delete or overwrite files in the system
directories as a user. Can't delete a system file?
</BLOCKQUOTE>
Linux is Unix-like, which was designed from ground up for network, multi-user,
multitasking etc. So it's extremly good at it. On my PC at home, I made
more accounts for my relatives (they didn't know how to use a computer
initially), and I can happily leave them alone. Besides the graphical
interface being in my native language (and I'm proud I contribute to that)
in the worst case they can delete their personal files. They don't have the
rights for the rest :), not even each other's.
You can also make groups for different departments. Each user will have
his/her own account, which could be part of one/more departments.
<P> As I said, once you get to know Linux better, you'll delete even your
windows backups :)
You can always find help in the Linux community (but make sure you
Read Those Fine Manuals first), or even pay for commercial support.
<P> See ya around !
<P> Marius
<P> --<BR>
Your mouse has moved. In order for the change to take effect, <BR>
Windows must be restarted. Reboot now ? [OK]<BR>
<A HREF="http://www.linuxstart.com/~marius">http://www.linuxstart.com/~marius</A><BR>
<P> <hr> <P>
<!--================================================================-->
<a name="calc_speed"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: Pentium-II Xeon and calculation speed
</FONT> </H3>
Sat, 8 Apr 2000 19:00:52 -0600 (MDT)
<BR>From: Gordon Haverland <<A HREF="mailto:ghaverla@freenet.edmonton.ab.ca">ghaverla@freenet.edmonton.ab.ca</A>>
<P> Another place to look for speed improvements is
custom math libraries. A lot of FORTRAN is concerned
with linear algebra, and for speeding up things like
LAPACK the place to start is probably getting some kind
of BLAS. There does exist a couple of had tuned
BLAS for some Intel-386 family processors running
Linux, but what looks like the best place to get
going is something called ATLAS. This is a package
which tries to calculate an optimal BLAS Level 1, 2
and 3 library for your machine. It comes pretty
close to hand tuned BLAS in assembler, and can work
from C or FORTRAN calling.
<P> Gord
<P> <hr> <P>
<!--================================================================-->
<a name="mem"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Memory greater than 64MB
</FONT> </H3>
Mon, 10 Apr 2000 17:43:53 -0500
<BR>From: bjones <<A HREF="mailto:wljones@hex.net">wljones@hex.net</A>>
<P> I used the "free" command on both of my computers, and found that they
were using only 64 MB of memory in Linux. I had to use the "append"
addition in LILO to get Linux to see all of it. It appears to be a bios
problem, and I like this simple solution. As an aside, I never noticed
a shortage of available memory problem before the fix. Linux worked
quite well with 64 MB and a 64 MB swap partition. The swap partition
was never used, to my knowledge, but the manuals threatened death, doom,
and destruction if I omitted it.
<P> A quick note: The memory used by the on-board video with the AMD K6-2
processor cannot be used by Linux. I have 160 MB of memory on that
computer. Attempting to use all of it caused a kernel panic at boot
time. I use 8 MB for graphics. Changing the append statement to use
152 MB worked. I am sure happy about saving that boot floppy.
<H2>Your Editor wrote:</H2>
<P> I used to have to use the 'append "mem=8M"' statement, but now I don't
have to. Which kernel are you using? It may have been something that
changed in the 2.2 kernels.
<H2>William replied:</H2>
<P> Two computers in use:
(1) 300 MHz K6-2, 160MB memory, S.u.S.E. 6.1, upgraded to 6.3 with a
giveaway CD-ROM, 1999 Bios that switches to an Adaptec 1520 Bios during
boot.
(2) 100MHZ Pentium, 96 MB memory, Sam's version of Red Hat 6.0, 1996
Bios that switches to an Adaptec 2940 bios during boot.
<P> I like my computers, and am not concerned about needing an extra tweak
to reach all the memory. Both machines are Lilo dual boot to Linux and
M$. They are (ab)used frequently, inside and out. Additional operating
systems that are now on a bookshelf include OS/2, MS-DOS since 1.0, and
Coherent 2 through 4. I will probably upgrade Someday Soon, and look
forward to having "free" see all of my memory without an "append" line
in Lilo.
<H2>Your patient Editor asked:</H2>
<P> Which kernel is it though? "uname -a" will tell you.
<H2>William responded:</H2>
<P> 1. K62, 2.2.13 #1 kernel ( remember, this updates S.u.S.E. 6.1, with a
lower 2.2 kernel)
<P> 2. 586, 2.2.5-13 kernel
<H2>Rick Smith <<A HREF="mailto:rsmith13@tampabay.rr.com">rsmith13@tampabay.rr.com</A>> confessed:</H2>
<P> Sir,
<P> After chastising Linux Gazette about not needing to put an: append "mem=xxM" statement in lilo.conf, it had to happen! I have been using
socket seven motherboards for several years and all currently have
128meg. They all run various versions of Linux: Redhat 5.2, Mandrake 6.1
and Suse 6.3. I have not had to put an append statement in lilo.conf or
use a mem= at the Lilo prompt to get all 128meg recognized.
<P> That is until now! I just bought a FIC SD-11 motherboard, Athlon 700 and
a new case. I took all the components: memory, drives, nic, video card,
from one of my socket seven systems and installed them in my new Athlon
system. (Please note: same drive with Suse 6.3 already installed.)
Everything seem fine until I ran: free and discovered I only had 64meg
of memory! So now, I had to put an append statement in lilo.conf to get
all 128meg recognized. It's definitely a "bios thing".
<P> BTW: When I upgrade a motherboard, I NEVER need to reinstall Linux but
almost always need to reinstall Win 9x.
<P> <hr> <P>
<!--================================================================-->
<a name="free_isp"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: Free ISPs for Linux
</FONT> </H3>
Thu, 13 Apr 2000 11:53:31 -0400
<BR>From: John Ruschmeyer <<A HREF="mailto:jruschmeyer@unixpros.com">jruschmeyer@unixpros.com</A>>
<BLOCKQUOTE>
<P> This isn't exactly a burning question but I'd be interested in
knowing if anyone in the Gazette readership knows of a free ISP
that supports Linux. All of the ones I've checked out so far
require Windows and/or Internet Explorer.
</BLOCKQUOTE>
<P> Check out FreeWWWeb
(<A HREF="http://www.freewwweb.com">http://www.freewwweb.com</A>). They are the only free
ISP I'm aware of which uses a stock PPP dialup and has no specific
browser requirement.
<P> Although they have a link for downloading software, you want the link
for signing up if you already have a browser.
<H2>Paul Garvey <<A HREF="mailto:paul@csn.ul.ie">paul@csn.ul.ie</A>> writes:</H2>
<P> Try the following link:
<A HREF="http://www.linux.ie/misc/oceanfree.html">
http://www.linux.ie/misc/oceanfree.html</A>
<P> <hr> <P>
<!--================================================================-->
<a name="palm"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: Palm databases and TSVs
</FONT> </H3>
Tue, 25 Apr 2000 12:14:38 -0600 (MDT)
<BR>From: Michael J. Hammel <<A HREF="mailto:mjhammel@graphics-muse.org">mjhammel@graphics-muse.org</A>>
<P> Thus spoke Nick Bailey <<A HREF="mailto:N.J.Bailey@leeds.ac.uk">N.J.Bailey@leeds.ac.uk</A>>:
<BLOCKQUOTE>
I have a question about connectivity with/via Linux. I need to pull a
load of stuff of the Psion, and this is done by getting the files
converted to tab-separated values by some utilities I've got. I have
read and (I think) understood how to access a palm database from a
program running on it, but there's not a lot of stuff on how to get a
file full of TSVs onto the Palm. I've read the connectivity howto, and
I also understand how to upload a palm database, but its the format
conversion between plain text and palm database which looks hard to me.
There's no obvious tool to do it, and I can't see how in the docs or
this book I bought. Maybe it will become obvious when I unpack the dev
tools?
</BLOCKQUOTE>
<P> Nah, this is a traditional DB/Spreadsheet conversion issue. You need to go
from TSV's to CSV's (comma seperated values). The pilot-link software can
upload some items as long as they are in CSV's. Getting from TSV's to
CSV's is the hard part. If you're moderately good at regular expression
handling, you could probably whip up a perl script to do it. The CSV's
have commas between fields and any fields that have embedded commas are
enclosed in double quotes. I think you can actually get away with using
double quotes around all fields, but I'm not sure about that. I only did
enough work with them to get xnotes working properly (and I use the term
"properly" very loosely here).
<BLOCKQUOTE>
<P> I'm intending to use gcc to make port over a psion app, Vorg
http://www.polonius.demon.co.uk/Nick/Psion/software.html (this page
disappears soon when I change ISP). I'm also wanting to put a CD
database on the Palm Pilot which has a strange and complex structure, so
I'll be writing a application to support that. I've already bagged the
gcc port and XCoPilot; I was wondering what else you would recommend?
</BLOCKQUOTE>
<P> To be honest, I don't write apps for the Pilot. It was something I wanted
to do, but there just wasn't enough time in the day to get seriously
involved in it. One has to pick certain specialties in todays world - mine
turned out to be graphics. Ah well. Maybe someday.
<BLOCKQUOTE>
<P> Thanks a lot for your help, however short. Even "look at the xnotesplus
source here" would be a help.
</BLOCKQUOTE>
<P> Ick - the xnotes source probably wouldn't help much. It's just an ugly
wrapper around pilot-link tools (yep, a bunch of execv's and the like).
But I think if you can write your parser to go from TSV's to CSV's you'll
be on your way.
<P> <hr> <P>
<!--================================================================-->
<a name="pilot"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Re: help setting up pilot-link
</FONT> </H3>
Tue, 25 Apr 2000 12:24:00 -0600 (MDT)
<BR>From: Michael J. Hammel <<A HREF="mailto:mjhammel@graphics-muse.org">mjhammel@graphics-muse.org</A>>
<P> Thus spoke Jon D. Slater <<A HREF="mailto:JSlater@qualcomm.com">JSlater@qualcomm.com</A>>
<BLOCKQUOTE>
I've successfully downloaded and install pilot-link-0.9.0-8.
I didn't find much documentation. I'm having trouble communicating w/
my palm.
I have both a serial cradle and a USB cradle, and I can't get either one
to work.
I'm using RedHat 6.1 on a P-II/333 machine.
Do you know of a good resource for connecting to my PC?
</BLOCKQUOTE>
<P> There is a fair amount online. I know I wrote an article for Linux Journal
a year or two back about how to connect use the pilot-link software with
your Pilot's serial cradle. Search the Linux Journal site
(www.linuxjournal.com) - I know it's online there somewhere. I think they
had another article on the same subject earlier this year or maybe late
last year.
<P> I can't speak for the USB cradle, since I've never tried one of those, but
the serial cable is pretty straight forward. First make sure you know
which serial port you're connecting to. Then set a couple of environment
variables from the command line:
<PRE>
% export PILOTPORT=/dev/ttyS0
% export PILOTRATEW600
</PRE>
<P> The first one tells the pilot-link software what serial port to use. The
second tells it what speed to transfer data at. I think you can set this
to a higher baud rate. I just happen to use this one because I know it
works for me.
<P> Now you can just run the pilot link commands:
<PRE>
% pilot-xfer -b /tmp/pilot-backup
</PRE>
<P> That would backup your pilot to a directory called "/tmp/pilot-backup". I
can't remember if it will create the directory for you, so you're better off
making the directory yourself before hand.
<P> <hr> <P>
<!--================================================================-->
<a name="pilot"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">Other markup languages (troff)
</FONT> </H3>
Wed, 26 Apr 2000 22:57:31 +1000 (EST)
<BR>From: Murray Adelman <<A HREF="mailto:murray@ics.mq.edu.au">murray@ics.mq.edu.au</A>>
Thanks Matej.
Here are two troff sites. The first is where to get the original Bell
documents. The second is a new one and I haven't looked into it much.
<UL>
<LI> <A HREF="http://plan9.bell-labs.com/7thEdMan/vol2/tbl">
http://plan9.bell-labs.com/7thEdMan/vol2/tbl</A>
<LI> <A HREF="http://groff.ffii.org/">http://groff.ffii.org/</A>
</UL>
You might also want to look in on the newsgroups comp.text and
gnu.groff.bug .
in which troff problems are discussed. The second is devoted to
problems with groff; but a lot of the discussion applies to any *roff.
<P> <hr> <P>
<!--================================================================-->
<a name="pilot"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
ANSWER: <FONT COLOR="navy">KPPP: Users required to enter root-password?
</FONT> </H3>
Fri, 28 Apr 2000 21:44:20 +1000
<BR>From: "Steve & Dee McInerney" <<A HREF="mailto:stedee@bigpond.com">stedee@bigpond.com</A>>
<BLOCKQUOTE>
I have just installed version 6.1 and set up my modem to dial out to my ISP.
However, when I log on as a user and press KDE>Internet>kppp a pop-up box
opens up and wants me to enter the root-password! This does not seem right.
is there a way to avoid having to enter the root pass word when logged on as
a non-root user?
</BLOCKQUOTE>
The way I've solved this one was to modify the /etc/pam.d/kppp file to
include the line at the beginning of the file:
<PRE>
auth sufficient /lib/security/pam_console.so
</PRE>
<!-- END tips.answers -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <P>
<H5 ALIGN=center>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.
Copyright © 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Graphical Programs</font></H1>
<H4>By <a href="mailto:baptista@linuxsolutions.com.br">Paulo Henrique Baptista de Oliveira</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<BLOCKQUOTE> <EM>
[This survey of 3D graphics programs is taken from a series by Paulo
Baptista of OLinux. You will see that some of the raytraced images are
breathtaking. To preserve the integrity of the article, I have left
it in its original format. Please disregard the "Part II" and the
citations of other articles: we will have more articles by Mr Baptista,
but not necessarily in the same order as the original series.
<P> More articles can be found on the OLinux site,
<A HREF="http://www.olinux.com.br">http://www.olinux.com.br</A>
(Portuguese), which also has many other resources for Linux users.
Work is underway on an English-language site; the Interviews
section
(<A HREF="http://www.olinux.com.br/interviews">http://www.olinux.com.br/interviews</A>)
is already operational. -Ed.]
</EM> </BLOCKQUOTE>
<CENTER><FONT SIZE="+1">
<A HREF="gx/baptista/index.html">Read the article now</A>
</FONT></CENTER>
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Paulo Henrique Baptista de Oliveira<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Introduction to UNIX Assembly Programming</font></H1>
<H4>By <a href="mailto:konst@linuxassembly.org">Konstantin Boldyshev</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<P>
<EM>This document is intended to be a tutorial, showing how to write
a simple assembly program in
several UNIX operating systems on IA32 (i386) platform.
Included material may or may not be applicable
to other hardware and/or software platforms.
Document explains program layout, system call convention,
and build process.
It accompanies Linux Assembly HOWTO, which may be of your interest as well,
though is more Linux specific.</EM>
<P>
v0.3, April 09, 2000
<HR>
<H2><A NAME="s1">1. Introduction</A></H2>
<H2><A NAME="ss1.1">1.1 Legal blurb</A>
</H2>
<P>Copyright © 1999-2000 Konstantin Boldyshev.
Permission is granted to copy, distribute and/or modify
this document under the terms of the GNU
<A HREF="http://www.gnu.org/copyleft/fdl.html">Free Documentation License</A>,
Version 1.1 or any later version published by the Free Software Foundation.
<P>
<H2><A NAME="ss1.2">1.2 Obtatining this document</A>
</H2>
<P>The latest version of this document is available from
<A HREF="http://linuxassembly.org/intro.html">http://linuxassembly.org/intro.html</A>.
If you are reading a few-months-old copy,
please check the url above for a new version.
<P>
<H2><A NAME="ss1.3">1.3 Tools you need</A>
</H2>
<P>You will need several tools to play with programs included in this tutorial.
<P>First of all you need assembler (compiler).
As a rule modern UNIX distribution includes <CODE>gas</CODE> (GNU Assembler),
but all examples specified here use another assembler -- <CODE>nasm</CODE> (Netwide Assembler).
You can download it from the
<A HREF="http://www.cryogen.com/Nasm/">nasm page</A>,
it comes with full source code.
Compile it, or try to find precompiled binary for your OS;
note that several distributions (at least Linux ones)
already have <CODE>nasm</CODE>, check first.
<P>Second, you need linker -- <CODE>ld</CODE>, since <CODE>nasm</CODE> produces only object code.
Any distribution should embrace <CODE>ld</CODE>.
<P>If you're going to dig in, you should also install include files for your OS,
and if possible, kernel source.
<P>Now you should be ready to start, welcome..
<P>
<HR>
<H2><A NAME="s2">2. Hello, world!</A></H2>
<P>
<P>Now we will write our program, classical "Hello, world" (hello.asm).
You can download its sources and binaries
<A HREF="http://linuxassembly.org/intro/hello.tgz">here</A>.
But before let me explain several basics.
<P>
<H2><A NAME="ss2.1">2.1 System call</A>
</H2>
<P>Unless program is just implementing some math algorithms in assembly,
it will deal with such things as getting input, producing output,
and exiting. Here comes a need to call some OS service.
In fact, programming in assembly language is quite the same in different OSes,
unless OS services are touched.
<P>There are two common ways of performing a system call in UNIX OS:
trough the C library (libc) wrapper, or directly.
<P>Using or not using libc in assembly programming is more a question
of taste/belief than something practical.
Libc wrappers are made to protect program from possible system call convention change,
and to provide POSIX compatible interface, if kernel lacks it for some call.
However usually UNIX kernel is more or less POSIX compliant,
this means that syntax of most libc "system calls" exactly
matches syntax of real kernel system calls (and vice versa).
But main drawback of throwing libc away is that are loosing several functions
that are not just syscall wrappers, like printf(), malloc() and similar.
<P>This tutorial will show how to use <B>direct</B> kernel calls,
since this is the fastest way to call kernel service;
our code is not linked to any library,
it communicates with kernel directly.
<P>Things that differ in different UNIX kernels
are set of system calls and system call convention
(however as they strive for POSIX compliance, there's a lot of common between them).
<P><EM>Note for (former) DOS programmers: so, what is that system call?
Better to explain it in such a way:
if you ever wrote a DOS assembly program (and most IA32 assembly programmers did),
you remember DOS services <CODE>int 0x21, int 0x25, int 0x26</CODE> etc..
This is what can be designated as system call.
However the actual implementation is absolutely different,
and this doesn't mean that system calls necessary are done via some interrupt.
Also, quite often DOS programmers mix OS services with BIOS services
like <CODE>int 0x10</CODE> or <CODE>int 0x16</CODE>, and are very surprised when they fail
to perform them in UNIX, since these are not OS services).</EM>
<P>
<H2><A NAME="ss2.2">2.2 Program layout</A>
</H2>
<P>As a rule, modern IA32 UNIXes are 32bit (*grin*), run in protected mode,
have flat memory model, and use ELF format for binaries.
<P>Program can be divided into sections (or segments):
<CODE>.text</CODE> for your code (read-only),
<CODE>.data</CODE> for your data (read-write),
<CODE>.bss</CODE> for uninitialized data (read-write);
actually there can be few other, as well as user-defined sections,
but there's rare need to use them and they are out of our interest here.
Program must have at least <CODE>.text</CODE> section.
<P>Ok, now we'll dive into OS specific details.
<P>
<H2><A NAME="ss2.3">2.3 Linux</A>
</H2>
<P>System calls in Linux are done through int 0x80.
(actually there's a kernel patch allowing system calls to be done
via <EM>syscall (sysenter)</EM> instruction on newer CPUs, but this
thing is still experimental).
<P>Linux differs from usual UNIX calling convention,
and features "fastcall" convention
for system calls (it resembles DOS).
System function number is passed in <CODE>eax</CODE>,
and arguments are passed through registers, not the stack.
There can be up to five arguments in <CODE>ebx, ecx, edx, esi, edi</CODE> consequently.
If there's more than five arguments, they are simply passed though the
structure as first argument.
Result is returned in <CODE>eax</CODE>, stack is not touched at all.
<P>System call function numbers are in sys/syscall.h,
but actually in asm/unistd.h,
some documentation is in the 2nd section of manual
(f.e. to find info on <CODE>write</CODE> system call, issue <CODE>man 2 write</CODE>).
<P>There are several attempts to made up-to-date documentation of Linux system calls,
examine URLs in the
<A HREF="#references">references</A>.
<P>So, our Linux program will look like:
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
section .text
global _start ;must be declared for linker (ld)
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
_start: ;we tell linker where is entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>As you will see futther, Linux syscall convention is the most compact one.
<P>Kernel source references:
<UL>
<LI>arch/i386/kernel/entry.S</LI>
<LI>include/asm-i386/unistd.h</LI>
<LI>include/linux/sys.h</LI>
</UL>
<P>
<P>
<H2><A NAME="ss2.4">2.4 FreeBSD</A>
</H2>
<P>FreeBSD has "usual" calling convention,
when syscall number is in eax, and parameters are on the stack
(the first argument is pushed the last).
System call is to be performed through the <B>function call</B> to a
function containing <CODE>int 0x80</CODE> and <CODE>ret</CODE>, not just <CODE>int 0x80</CODE> itself
(return address MUST be on the stack before <CODE>int 0x80</CODE> is issued!).
Caller must clean up the stack after call.
Result is returned as usual in <CODE>eax</CODE>.
<P>Also there's an alternate way of using <CODE>call 7:0</CODE> gate instead of <CODE>int 0x80</CODE>.
End-result is the same, not counting increase of program size,
since you will also need to <CODE>push eax</CODE> before,
and these two instructions occupy more bytes.
<P>System call function numbers are in sys/syscall.h,
documentation is in the 2nd section of man.
<P>Ok, I think the source will explain this better:
<P><EM>Note: Included code may run on other *BSD as well, I think.</EM>
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
section .text
global _start ;must be declared for linker (ld)
msg db "Hello, world!",0xa ;our dear string
len equ $ - msg ;length of our dear string
_syscall:
int 0x80 ;system call
ret
_start: ;tell linker entry point
push dword len ;message length
push dword msg ;message to write
push dword 1 ;file descriptor (stdout)
mov eax,0x4 ;system call number (sys_write)
call _syscall ;call kernel
;actually there's an alternate
;way to call kernel:
;push eax
;call 7:0
add esp,12 ;clean stack (3 arguments * 4)
push dword 0 ;exit code
mov eax,0x1 ;system call number (sys_exit)
call _syscall ;call kernel
;we do not return from sys_exit,
;there's no need to clean stack
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>Kernel source references:
<UL>
<LI>i386/i386/exception.s</LI>
<LI>i386/i386/trap.c</LI>
<LI>sys/syscall.h</LI>
</UL>
<P>
<H2><A NAME="ss2.5">2.5 BeOS</A>
</H2>
<P>BeOS kernel is using "usual" UNIX calling convention too.
The difference from FreeBSD example is that you call <CODE>int 0x25</CODE>.
<P>On information where to find system call function numbers and other
interesting details, examine
<A HREF="#references">asmutils</A>,
especially os_beos.inc file.
<P><EM>Note: to make <CODE>nasm</CODE> compile correctly on BeOS you need
to insert <CODE>#include "nasm.h"</CODE> into <CODE>float.h</CODE>,
and <CODE>#include <stdio.h></CODE> into <CODE>nasm.h</CODE>.</EM>
<P>
<BLOCKQUOTE><CODE>
<HR>
<PRE>
section .text
global _start ;must be declared for linker (ld)
msg db "Hello, world!",0xa ;our dear string
len equ $ - msg ;length of our dear string
_syscall: ;system call
int 0x25
ret
_start: ;tell linker entry point
push dword len ;message length
push dword msg ;message to write
push dword 1 ;file descriptor (stdout)
mov eax,0x3 ;system call number (sys_write)
call _syscall ;call kernel
add esp,12 ;clean stack (3 * 4)
push dword 0 ;exit code
mov eax,0x3f ;system call number (sys_exit)
call _syscall ;call kernel
;no need to clean stack
</PRE>
<HR>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss2.6">2.6 Building binary</A>
</H2>
<P>
<P>Building binary is usual two-step process of compiling and linking.
To make binary from our hello.asm we must do the following:
<P>
<HR>
<PRE>
$ nasm -f elf hello.asm # this will produce hello.o object file
$ ld -s -o hello hello.o # this will produce hello executable
</PRE>
<HR>
<P>That's it. Simple.
Now you can launch hello program by entering <CODE>./hello</CODE>, it should work.
Look at the binary size -- surprised?
<P>
<HR>
<H2><A NAME="references"></A> <A NAME="s3">3. References</A></H2>
<P>I hope you enjoyed the journey. If you get interested in assembly
programming for UNIX, I strongly encourage you to visit
<A HREF="http://linuxassembly.org">Linux Assembly</A>
for more information, and download
<A HREF="http://linuxassembly.org/asmutils.html">asmutils</A> package,
it contains a lot of sample code.
For comprehensive overview of Linux/UNIX assembly programming refer to the
<A HREF="http://linuxassembly.org/howto.html">Linux Assembly HOWTO</A>.
<P>Thank you for your interest!
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Konstantin Boldyshev<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">HelpDex</font></H1>
<H4>By <a href="mailto:shane_collinge@yahoo.com">Shane Collinge</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
Carol's new colleague Violet--Vi for short:
<IMG ALT="names.jpg" SRC="gx/collinge/names.jpg"
WIDTH="750" HEIGHT="302">
<BR CLEAR="all">
<IMG ALT="parallel.jpg" SRC="gx/collinge/parallel.jpg"
WIDTH="750" HEIGHT="305">
<BR CLEAR="all">
<IMG ALT="oreilly.jpg" SRC="gx/collinge/oreilly.jpg"
WIDTH="750" HEIGHT="299">
<BR CLEAR="all">
<IMG ALT="stay.jpg" SRC="gx/collinge/stay.jpg"
WIDTH="750" HEIGHT="299">
<BR CLEAR="all">
<IMG ALT="zero.jpg" SRC="gx/collinge/zero.jpg"
WIDTH="750" HEIGHT="299">
<BR CLEAR="all">
<P> More <EM>HelpDex</EM> cartoons are on Shane's web site,
<A HREF="http://mrbanana.hypermart.net/Linux.htm">
http://mrbanana.hypermart.net/Linux.htm</A>.
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Shane Collinge<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Miguel de Icaza on Gnome and His New Company HelixCode</font></H1>
<H4>By <a href="mailto:frc@linuxsolutions.com.br">Fernando Ribeiro Corrêa</a></H4>
<H4><EM>Originally published at <A HREF="http://www.olinux.com.br/interviews/11/en">
www.olinux.com.br/interviews/11/en</A><BR>
A Portuguese version is at <A HREF="http://www.olinux.com.br/entrevistas/11">
http://www.olinux.com.br/entrevistas/11</A></EM></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<P> <EM>A few years ago, Miguel Icaza has started Gnome inspired by GNU and its
Public License. Now, Gnome has grow to be a Project with hundreds of volunteers
around the world. Recently, he started HelixCode, a company dedicated to
provide the latest "features, improvements, and enhancements" of Helix Gnome
distribuiton.</EM>
<P> <b>OLinux: Where were you born? How old are you? Where did you study and
graduate from college?</b>
<P> <b>Miguel de Icaza</b>: I was born in Mexico City, and I am 27 years old
this year.
<P> I did study at The National and Autonomous University of Mexico (UNAM), I
did enroll for the Math major degree, but I dropped out of college half-way
trough the degree.
<P> <b>OLinux: How did you come with the idea of Gnome Project? Was it a sort of insight?</b>
<P> <b>Miguel de Icaza</b>: There were various things that played a role on this.
<P> A few weeks before the GNOME project had been launched, I had visited
Microsoft, and got a chance to learn about their component architectu
(COM and Active-X) and how it worked.
<P> The idea of a component system fascinated me, and Federico and I
started working on specing out this project, we got the name (GNOME)
and did some work on it, but it was not finished, as I was working on
the Linux/SGI port with Ralf and Federico was back then the GIMP
maintainer.
<P> Then KDE appeared on the scene, and we were all very excited with the
project, and although the license was known to have a few problems, we
did not pay attention initially. Later, when talking to Richard
Stallman and Erik Troan, we realized how bad the license for Qt (the
underlying library for KDE was).
<P> Also, Gtk+ was the GUI toolkit for the GIMP, one of the most
successful Free Software/Open Source projects ever done, and many
contributors were joining the Gtk+ effort.
<P> <b>OLinux: What is the main purpose of Gnome and how far is it to achieve its goals? </b>
<P> <b>Miguel de Icaza</b>: GNOME is trying to bring new and missing technologies to free systems,
in particular GNU/Linux, but GNOME works on pretty much every Unix out
there.
<P> We have gone a long distance. GNOME currently provides:
<P> 1. A user friendly desktop, with the common abstractions that people expect from a desktop.
<P> 2. A number of tools to get work done on a computer by regular users (non hacker, non-sysadmin kind of users).
<P> 3. Productivity applications (The drawing program Gimp, the Diagram program Dia, the Gnumeric spreadsheet, the Vector drawing program SodiPodi, the Gnome Calendar)
<P> 4. Development tools: GNOME ships with various development tools for rapid application development (Glade, a GUI designer), memprof (for profiling, detecting memory leaks and improving memory allocation patterns in applications)
<P> 5. Development libraries: we provide libraries for various tasks: GUI application creation (the Gtk+ library); An application framework (The GNOME libraries); XML parsing; uniform access to resources; asyncronous IO; a unified printing architecture; a CORBA implementation; unified image loading and manipulation and various more
<P> 6. The Bonobo component architecture: a system for creating reusable components. The component architecure is built on top of CORBA, and it enables people to create compound
documents.
<P> This is probably one of the most exciting projects in GNOME right now, as it will help us create more complex applications that are easier to use, easier to maintain, easier to grow and will enable more people to join the project.
<P> Bonobo is what GNOME was originally thought to be.
<P> 7. A team of contributors devoted to making better software.
<P> <b>OLinux: Gnome has grown to be a big Project with hundreds of people involved and programs being develped, how do you manage to control all of that? How many coordenators are directly involed with Gnome daily activities? How many people are involved, adding developeers and volunteers? Give those numbers for the past few years. Are there companies or organizations that sponsor and support Gnome?</b>
<P> <b>Miguel de Icaza</b>: The GNOME project consists of many various "subprojects". Each
subproject is managed by a different person, and the structure is
pretty much the same as the one used in the Linux kernel: people
submit patches to the upstream maintainer, where the changes are
reviewed and installed into the system if they are considered to be
good.
<P> There are about 400 people with access to the CVS repository these
days. Contributors range from documenters, to translators to
programmers, and system administrators.
<P> There are a few companies shipping GNOME with their operating system
distributions (Turbo Linux, Red Hat, SuSE) and they do fund some of
the work that goes into GNOME.
<P> On the other hand there is now a growing GNOME industry. First of all
my company Helix Code has been working in providing support services
for GNOME, as well as developing high-end and high-quality
productivity applications. We are currently developing and improving
the Evolution groupware suite and the Gnumeric spreadsheet.
<P> Evolution is a pretty ambitious project for providing a uniform, and
powerful interface to the information a user has to handle. The idea
is to provide ways for users to find, and keep track of all their
information sources: mail, contacts, chats, instant messaging, paging
services and more. With a pluggable architecture based on Bonobo, the
system can be extended to handle all sorts of information that needs
to be managed.
<P> Evolution is also intended to be a client for Lotus Notes and
Microsoft Exchange servers to enable easy corporate deployment of
free-software desktop systems.
<P> Gnumeric is the other project we are developing: a Spreadsheet that is
intended to be a replacement for the proprietary offerings that
provides all the features people expect from these sort of tool.
<P> Eazel is another company working on GNOME, they are working on the new
file manager for GNOME.
<P> And there are a few other GNOME-based startups that are filling the
various needs of the free software community, but I will let them
announce themselves.
<P> <b>OLinux: How is Gnome integrated with the rest of Linux communities, other development projects, alliances, partnerships? Give us some names and the activities exchanged between thoe groups.</b>
<P> <b>Miguel de Icaza</b>: GNOME is part of the GNU project. We try to work with any other free
software projects, as in the end our objective is for GNU to be a full
solution to the user needs.
<P> <b>OLinux: You have started a HelixCode, right? What is the focus of your business? How many cds of Helixcode have been sold you downloaded from the site? Are you planning an IPO?</b>
<P> <b>Miguel de Icaza</b>: Helix Code is a company focused on making sure free software is viable
in today's world. So we are developing free software productivity
applications under the GPL, and we are also providing consulting
services and support for other companies.
<P> The Helix GNOME distribution is just a service to the GNOME community:
we know that it is sometimes hard to keep up with the latest advances
in the rapidly evolving GNOME project.
<P> Helix GNOME is managed by Jacob Berkman and Joe Shaw. They are the
magicians behind providing a real-time GNOME environment for people to
use. Now users have a chance of running the latest version of GNOME
without having to know any system administration, nor being experts.
<P> The latest GNOME with the latest features, improvements, and
enhancements is only a few clicks away from your desktop.
<P> It is hard to tell how many people have installed Helix GNOME, as
there are many mirrors of the master site.
<P> We are planning on growing to meet the needs of the free software
market in terms of technology and usability.
<P> Best wishes, Miguel.
<P> <b>OLinux: All OLinux user's thank you too.</b>
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Fernando Ribeiro Corrêa<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">KDE2 is Just Around the Corner. Are You Curious?</font></H1>
<H4>By <a href="mailto:frc@linuxsolutions.com.br">Fernando Ribeiro Corrêa</a></H4>
<H4><EM>Originally published at <A HREF="http://www.olinux.com.br/interviews/11/en">
www.olinux.com.br/interviews/11/en</A></EM></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<P><EM>Mosfet is a key developer in KDE Project and ahead a great reponsability as the world waits for KDE2 and KOffice suite releases. Mosfet told OLinux about the details related to KDE2, its current development stage and how "KDE2 intends to compete with Windows head-on in all features".</EM>
<P> <b>OLinux: Tell us about our career: college, jobs, personal life (age, birth place)</b>
<P> <b>Mosfet</b>: Well, I'm 25 years old and was born in Chicago Il, USA. When I was a child we moved to Austin, Texas and I'm currently living in Indiana. As
far as a personal life, that is mostly just something that exists in
theory for me ;-)
<P> I went to school at Purdue University in Indiana and started doing Unix
admin professionally when I was 19. I started with Unix when I was
around 15 yrs old with a bootlegged copy of Xenix because I wanted to do
32bit graphics programming. Previously I was making DOS calls in
assembler to the extended memory manager, throwing myself in protected
mode to do calculations, then going back to real mode. Unix was pure joy
compared to that :)
<P> Once I got older my career has been pretty much swinging back and forth
between work and education. For most of the time work involving Unix has
focused on both administration of Oracle and either Digital Unix (now
Tru64) or HP/UX database clusters and custom application development for
database interface applications. Recently, with the advent of Linux and
user interfaces such as KDE, I have been involved with that and am now paid by Linux Mandrake to work on KDE2 full time.
<P> <b>Olinux: What are your responsibilities at KDE? Do you have any other jobs?</b>
<P> <b>Mosfet</b>: KDE2 is my sole focus at this point. I am responsible for widget and
window manager style engines (dynamic look and feels written in C++),
widget and window manager theme code, the plugin mechanism for the
window manager, a lot of the new panel's code is mine (although recently
Matthias Elter is working a lot on this), some of the KDE graphical
effects engine, and a new extensive image management system called
"Pixie".
<P> Of course, being free software people can pretty much choose what they
want to work on and when. The best place to see what myself and others
are currently working on is my KDE2 development webpage at
http://www.mosfet.org.
<P> <b>OLinux: How is KDE organized? Try to give us an idea of how KDE works? How the work is coordinated and managed (servers, directories, contribution, staff payment)? ow many people are involved? What are the main problems?</b>
<P> <b>Mosfet</b>: KDE core development is based on contribution from a large group of free
software developers. KDE's core system gets several thousand commits
(developers doing stuff and making improvements) a month - you can get
exact numbers for a given month at http://lists.kde.org. This is
excluding the hundreds of applications not maintained in the KDE CVS and
part the KDE project itself. As far as the exact number of individual
authors I don't know off hand but there are a few hundred developers
registered with our source management system (CVS).
<P> If you write code and it rocks it gets into KDE. Anyone can contribute
to KDE, although each project has it's own maintainer and if you want to
do extensive work it's best to contact that person first. Once that is
done you can work either in our CVS or via patches.
<P> There is a difference between software included in the KDE core packages
(such as kdebase, kdegraphics, etc...), and those maintained by
individual authors. The core packages are largely a collaborative effort
and gets the attention of a large group of developers. Individual
packages are usually the efforts of either individuals or small groups
of people. As an application developer, the approach you take is largely
a matter of style. Do you want a potentially huge group of people fixing
things and adding features to your code or do you want to maintain
strict control over the development of your app? This largely mandates
if your going to be a core developer or maintain a separate app outside
of the core of KDE.
<P> <b>OLinux: Does any private company supports KDE? Everyone is volunteer?</b>
<P> <b>Mosfet</b>: Many companies support KDE development. Most notably Linux Mandrake, Suse, Caldera, Corel, Red Hat, and Troll Tech all have developers
dedicated to KDE - and that's just what comes to mind. There are also
several non-Linux distribution companies I know of that are acquiring
KDE developers for free software development.
<P> The difference between KDE and competing projects is KDE developer
funding seems to be spread over a wider group of Linux companies. You
don't have one or two interests controlling an important group of KDE
developers. You have a couple people working on KDE in many different
companies and collaborating with each other. A vast number of different
interests both by volunteer developers and those working on distributing
free software are represented.
<P> KDE also seems to be the choice being made by commercial application
developers coming from Windows such as Inprise/Corel. Many of these
people can't imagine doing application development in a primarly C API
as a step above what they had in Windows, even if there are bindings,
etc... The KDE/Qt API is the only one which makes sense to these people.
Combining the power of Linux/Unix systems and the powerful C++ API of
KDE is a dream compared to what they had on other platforms and what
they could get with other toolkits and bindings. This is extremely
important considering Linux's growth. If Linux continues growing at it's
current rate most of the developers will be coming from non-Unix
platforms, where C++ application development has been the standard for
compiled GUI applications for almost a decade.
<P> Of course, despite all of the above, KDE core development is maintained
and controlled by volunteers. People do it for fun, make applications
because they want to, submit patches because they like to fix things,
etc... If they are good coders and want a job developing free software,
more likely than not they could get it with KDE.
<P> <b>OLinux: What are the main differences between KDE1 and the next release KDE2?</b>
<P> <b>Mosfet</b>: Pretty much everything ;-) The libraries have been rewritten to be more
extendable, most of the UI is configurable with XML integrated into the
core system, there is a new internet transparent I/O subsystem, a new
browser, new HTML capabilites with support for things like CSS,
bidirectional text, unicode, and soon Netscape plugins, a new window
manager, help system, configuration system, panel, a whole slew of new
widgets and classes, widget styles and themes... The list goes on and
on.
<P> The main difference is now KDE2 is heavily component based, focusing on
the browser. All of the KOffice applications (KWord, KPresenter,
KIllustrator, KSpread, KImageShop, KIllustrator, KChart, and KFormula)
as well as many other KDE applications such as the PS/PDF viewer, mpeg
and image viewers, and DVI viewers are all components now - internet
transparent and embeddable in the browser. You can even embed the
terminal application in the browser and change directories using the
arrow buttons ;-) Pretty cool. KDE easily boasts the most extensive and
complete component model support for Unix desktops.
<P> <b>OLinux: Do you consider Corba technology as a advance for KDE in matters of a
better functionality? Do you see a lot of programmers using it? Give us some advantages.</b>
<P> <b>Mosfet</b>: Well, actually we found it wasn't an advance for us ;-) The problem with
Corba is the API is not ideal and it's very difficult for new
programmers to learn. We rely on components more extensively than any
other free desktop project has attempted thus far, and the requirement
to learn Corba in order to do even trivial KDE development was a huge
restriction. AFAIK Gnome got around this by both using components less
and providing easier function specific bindings where non-Corba experts
are likely to be doing development (such as control panel applets).
<P> This did not seem reasonable or clean to us. Even though we were using
Corba for a long time (well before KDE2 development started), and had
hundreds of thousands of lines of code based on it with both KOffice and
KDE2, people started looking at other standard Unix technologies that
accomplish the same thing. Orbit (the Corba Object Request Broker used
by Gnome) was considered and was faster than the ORB we were using but
still didn't solve the problems mentioned above - which are inherent in
Corba. We then came up with the current KParts technology we are using
for components. It is all based on standard Unix libraries such as
libICE, and allows people to learn how to do fully functional components
in less than a half hour. Using KDE you get the most component features
such as browser embedding and internet transparency that are extremely
fast and require the least amount of effort. No need to purchase 1,000+
page Corba tomes at your local bookstore, you can learn it over lunch :)
Once this transition was made the development of KDE2 increased
significantly over what was occuring before (an increase of over a
thousand commits a month now usually compared to our Corba days). This
shows that we made the right choice for developers. As far as
interoperability, under the hood all the technology we use is in C and
accessible through that, XML bindings are available, and Corba
middleware is in the works. AFAIK a Java interface is also being looked
into. The interoperability argument for Corba is largely misleading
anyways, you need to do custom programming to interface legacy code with
the desktop's API's no matter what mechanism you use - it doesn't just
happen magically. Both Linux desktops introduce new component API's you
need to port to, but using KDE this is extremely easy to do without any
prior experience.
<P> You can learn more about KParts and check out the "Learn KParts in 1/2
hour" tutorial at
<A HREF="http://developer.kde.org">http://developer.kde.org</A>. You can read a small
overview I wrote of why we chose the mechanism we did when the decision
was made a few months ago at
<A HREF="http://www.kde.org/technology.html">
http://www.kde.org/technology.html</A>.
<P> <b>OLinux: About Qt without X, do you think it will run in all Unix's machines and influence some special feature of KDE?</b>
<P> <b>Mosfet</b>: This is an interesting new development. Troll Tech has written a version
of Qt (the base toolkit used by KDE), that can run solely off the Linux
framebuffer and doesn't require X11. Originally intended for embedded
systems, combined with virtual windowed framebuffer windows it can
potentially end up as a very low overhead KDE desktop framework. It
already offers many advanced features directly influenced by direct
framebuffer access such as anti-aliased (smoothed) fonts and alpha
channel support.
<P> As far as what varients of Unix it will run on, I currently know it
supports Linux although any Unix system with a framebuffer (such as
Solaris) shouldn't be that difficult.
<P> Nonetheless, KDE will remain supporting X11. There is no reason not to,
one of the reasons for using high level toolkits like Qt is you don't
have to deal with the lower level stuff like if your running on a
framebuffer or an X server. Also, KDE/Qt is leading the way with this
technology and we are the first people to support it with a toolkit used
by a desktop. Some users will want access to legacy and non-KDE apps and
games, and X11 is essential as a common platform where you can run
applications developed under many different toolkits. As far as people
who only use KDE applications, they may very well get a quite cool low
overhead desktop...
<P> <b>OLinux: KDE1 use to be a heavy application, now that KDE2, adding all this new technology to KDE2, do you think that a new and potent hardware will be required for users to have a good system performance?</b>
<P> <b>Mosfet</b>: Hopefully not ;-) The component model of KDE helps a lot here. When you
start KDE1 a lot of things happen like the file manager and browser are
loaded, etc... Now KDE is designed to start the absolute minimum until
you actually use something - then dynamically load what you need. A lot
still happens, but now it is mostly low level stuff like initalizing the
client server I/O system and not things like loading HTML widgets.
<P> KDE2 is still alpha and there are issues getting in the way of making
this really giving users a gain yet, but it's being worked on. KDE2 will
certainly not require any more resources than KDE1, and hopefully will
require even less.
<P> <b>OLinux: What are the better features KDE will bring to users that Windows doesn't have? Can KDE already compete with Windows2000 in terms of GUI?</b>
<P> <b>Mosfet</b>: Absolutely! KDE2 intends to compete with Windows head-on in all features
- no excuses made. We got the components, the transparent access to the
web, the modern C++ API, developer support, and the applications needed
to seriously contend for user's desktops. As far as the GUI, that is a
matter I specifically deal with and I believe ours is becoming far
superior. Although as a fan of Mac and BeOS interfaces, I feel most UI's
are superior... what will be the default look and feel of KDE2 is
drastically improved from KDE1.
<P> <b>OLinux: When KDE expect to release KOffice1.0?</b>
<P> <b>Mosfet</b>: Alongside the release of KDE2.0, which is now in a library freeze
preparing for the second alpha release. I'm not sure if there will be a
third or if after that we will go straight to betas. KDE does have a
long beta cycle though, we will not release an official version until we
are sure it works well for the majority of people. We feel that is our
responsibility to the users of KDE, who have come to expect a stable
system.
<P> <b>OLinux: How do you see the Digital Society and future of Intenet five years from now? Say something about ecommerce, wireless internet, hand held appliances briefly.</b>
<P> <b>Mosfet</b>: Eeek, a long stream of buzzwords! Hell, I don't know. We will all
probably be out of shape and unable to tolerate sunlight because of too
much time on the internet ;-) That's about all I know...
<P> <b>OLinux: Send a message to programers in Brazil that work in Free Software/Opensource projects and to OLinux user's?</b>
<P> <b>Mosfet</b>: Brazil rocks! I lost my credit rating there last year...
<BLOCKQUOTE> <EM>
[By the way, I really like the animated image of the turning gears in
the bottom left of the <A HREF="http://www.kde.org">KDE web site</A>.
-Ed.]
</EM> </BLOCKQUOTE>
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Fernando Ribeiro Corrêa<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Linux in France: Guess MandrakeSoft's Next Move</font></H1>
<H4>By <a href="mailto:frc@linuxsolutions.com.br">Fernando Ribeiro Corrêa</a></H4>
<H4><EM>Originally published at <A HREF="http://www.olinux.com.br/interviews/11/en">
www.olinux.com.br/interviews/10/en</A><BR>
A Portuguese version is at <A HREF="http://www.olinux.com.br/entrevistas/11">
http://www.olinux.com.br/entrevistas/10</A></EM></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<P> <EM>Linux in France: ideas and plans of a MandrakeSoft company and its
comercial operation. Mandrakes co-founder and Vice-President Gael Duval
describes talks to OLinux about how he managed to make an international and top
seller company as the world number two Linux distribuiton in boxes sold in 1999
in less than two years and also Mandrake plans for an IPO. Will you
invest?</EM>
<P> <b>OLinux: Say something about your professional and personal background? Where
did you graduated? Brief us about your Linux career?</b>
<P> <b>Gael Duval</b>: I'm 26 years old. So no need to tell you that I didn't do much before!
I just studied computer sciences for 5 years at University in France.
In my last year I specialized in Networking & Electronic Documents.
After having used UNIX a lot (Solaris/SunOS) I discovered Linux in
1995. My first Linux distribution was taking 50 diskettes!
<P> <b>OLinux: As founder of Mandrake, how the idea of a distribution came to your
mind? Were you inspired by other distributions success?</b>
<P> <b>Gael Duval</b>: This is quite easy. In 1997 I had a need of a Linux distribution which
would be easy to install and very easy to use. Red Hat was quite easy
to install, but not easy to use. So I put KDE in Red Hat, added a few
things for simplifying the users life and I released. This wouldn't
have been possible in the proprietary software world! Since that,
Mandrake has evolved on its own way and it's good that we can invent
many new concepts.
<P> <b>OLinux: When Mandrake was created officially as a company?</b>
<P> <b>Gael Duval</b>: MandrakeSoft was founded in the end of 1998.
<P> <b>OLinux: What is Mandrakes mission and strategy?</b>
<P> <b>Gael Duval</b>: We want to provide Linux to the biggest number of users. Personal
users as well as corporates. The strategy is quite clear: we want to
improve as much as possible, release the best quality possible, and
offer the largest possible variety of products on as many plateforms
as possible. That's why we will soon have an offer for the
enterprises, and that we don't limit to x86 architecture. The force of
Linux is that it runs in x86, SPARC, Alpha, PPC, Mips, 68k... That's
not the case for any other proprietary OS!
<P> <b>OLinux: Is Mandrake an internacional company? How many affiliates, distributors
and resellers Mandrake works with? By this moment, international
revenues are already significant?</b>
<P> <b>Gael Duval</b>: MandrakeSoft has been an international company from the beginning
because before it was founded, I already had many contacts all around
the world, in Europe, America, Asia, Russia... We have two main
offices: one in Europe (Paris), one in the USA (Los Angeles). We have
many online resellers (about 50 for south+north America) and two major
distributors: MacMillan Software Publishing (we have a 5 years
agreement with them), and Kasper. Of course our international revenues
are significant, especially from America.
<P> <b>OLinux: What it's your position and responsibilities at Mandrake today?</b>
<P> <b>Gael Duval</b>: Well... My official title is "Vice-President & Co-Founder - Open
Source Development".
<P> <b>OLinux: How much Mandrake has grow since then? How much revenues have grown and
what is the projection for 2000? How many Mandrake's boxes were sold
last year and will be sold in 2000? Where is located Mandrake HeadQuarters?</b>
<P> <b>Gael Duval</b>:We had a fantastic growth! In the end of 1998 we were 3 people in
MandrakeSoft. In the end of 1999 we were 40, and right now we are 70.
The first Mandrake officially shipped by MandrakeSoft was 5.3. It's
been sold at around 3000 items. Then we sold more than 200,000 6.0 +
6.1 packs. The revenues have grown consequently.
<P> <b>Gael Duval</b>: MandrakeSoft headquarters are located in Paris, France.
<P> <b>OLinux: Can you give us an idea, how hard the work is ahead of a Linux company?</b>
<P> <b>Gael Duval</b>: 16 hours a day, from Monday to Sunday. Several hundreds emails fall in
my mailbox everyday!
<P> <b>OLinux: How profitable is Linux business in France, German and Europe?</b>
<P> It's ok but not very reactive. The big Linux hype is just starting
here. Not any Linux company is on a public market in Europe yet.
<P> <b>OLinux: Give us a panorama of Linux effective and potential growth in these locations?</b>
<P> <b>Gael Duval</b>: It's quite hard to say: we do 70% of revenues in the USA. It seems
that it's just beginning in fact.
<P> <b>OLinux:Is Mandrake planning an IPO for his year?</b>
<P> <b>Gael Duval</b>: Yes.
<P> <b>OLinux: Do you have examples of companies that have deployed Linux in a large scale?</b>
<P> <b>Gael Duval</b>: Do you mean in Europe? Do you mean Mandrake Linux? If it's Mandrake
Linux, we have official contacts with 180 companies that are already
using Mandrake.
<P> <b>OLinux: Give us cases of study about Mandrake usage inside important companies.</b>
<P> <b>Gael Duval</b>: There are several listed on our website. There is for example a
manufacturing aerospace company with 400 employees which uses Mandrake
for most its intranet servers. Of this big hotel in Poland with 450
employees which uses Mandrake for its internal servers databases...
<P> But the biggest userbase of Mandrake users are individual users
because we don't have a real offer yet for enterprises (that will come
in two months).
<P> <b>OLinux: How Mandrakes supports OpenSource/Free Software organizations
around the world?</b>
<P> <b>Gael Duval</b>: Firstly we give back all our code to the community: everything is
published under the General Public License. Secondly, we often sponsor
some events (such as a big Gnome meeting recently), we give web server
space on demand, we pay some people for working on free-software (for
example, we pay a KDE developpers and a KOffice developper) etc.
<P> <b>OLinux: Nowadays, companies as Oracle are saying future of business is ecommerce
through the Internet. Do you see it this way? is Linux Mandrake
developing any products or have any plans for ecommerce? What the main
bets and guidelines?</b>
<P> <b>Gael Duval</b>: Ecommerce is effectively a big thing. We already provide many tools
that can be used to build some ecommerce services (Postgres, MySQL,
Apache, PHP...). Furthermore, a complete solution for ecommerce has
been envisaged.
<P> <b>OLinux: What Linux hasn't achieved yet in your opinion?</b>
<P> <b>Gael Duval</b>: Large recognition. This leads to a lack of end-users applications. It
will change.
<P> <b>OLinux: What is the relation between Mandrake and Redhat?</b>
<P> <b>Gael Duval</b>: Do you mean official contacts or the relation between the two products?In the very beginning, Mandrake was based in RedHat work?</b>
<P> <b>Gael Duval</b>: Yes. Mandrake 5.1 was basically RH+updates+KDE+several improvements. Nowdays, RedHat uses Mandrake many new features?</b>
<P> RH has taken several ideas from Mandrake. The biggest one is certainly
the remote update tool (which permits to update packages that have
security holes etc.) but they have rewritten it. However in 6.2, they
directly put one of our package ("rpmlint" which can make some checks
on RPM packages). Maybe one day they'll adopt our installation
procedure which is the best installation procedure recognized in the
Linux world.
<P> <b>OLinux: How do you see this crossing relation?</b>
<P> <b>Gael Duval</b>: Great. It's not competition it's co-petition! Moreover, some of our
developers have personal contacts with RH and they work together on
improving RPM for example. Greets, Gael
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Fernando Ribeiro Corrêa<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Functions and aliases in bash</font></H1>
<H4>By <a href="mailto:pate@gnu.org">Pat Eyler</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
Many tutorials and introductions to bash talk about using aliases.
Unfortunately most of them don't cover functions. This is a real
loss, because functions offer many values that aliases don't.
<h3>Aliases</h3>
<p>Aliases are simple string substitutions. The shell looks at the first
word of a command and compares it against it's current list of
aliases. Further, if the last character of an alias is a space, it
looks at the next word as well. For example:
<blockquote><code>
<br>$ alias 1='echo '
<br>$ alias 2='this is an alias'
<br>$ 1 2
<br>this is an alias
<br>$
</code></blockquote>
<p>Aliases don't allow for control-flow, command line arguments, or
additional trickery that makes the command line so useful.
Additionally, the rules surrounding alias expansion are a bit tricky,
enough so that the bash(1) manpage recommends "[t]o be safe, always
put alias definitions on a separate line, and do not use alias in
compound commands".
<h3>An Intro to Functions</h3>
<p>Functions are really scripts run in the current context of the shell.
(This bit of techspeak means that a second shell is not forked to run
the function, it is run within the current shell.) Functions really
are full scripts in and of themselves, and allow all the flexibility
and capability that entails.
<p>You can create a functions a couple of different ways. You can just
enter it into a file and source the file with the '.' command (either
from the command line or in your start-up scripts). You can also just
enter the function into at the command line. A function is only
available in a session where it has been made available through one of
these methods (or has inherited it from its parent shell).
<p>To create a function from the command line you would do something
like this:
<blockquote><code><pre>
$ gla() {
> ls -la | grep $1
> }
</blockquote></code></pre>
<p>This is a pretty simple function, and could be implemented as an
alias as well. (There are reasons you might not want to do this,
we'll get to those later.) As written, it does a long listing of the
local directory and greps for any matches for the first argument. You
could make it more interesting by punching it through awk to find any
matching files that are larger than 1024 bytes. This would look like:
<blockquote><code><pre>
$ gla() {
> ls -la | grep $1 | awk ' { if ( $5 > 1024 ) print $0 } '
> }
</blockquote></code></pre>
<p>You can't do this as an alias, you're no longer just replacing gla
with the 'ls -la | grep'. Since its written as a function, there is
no problem using the $1 (referring to the first argument to gla)
anywhere in the body of your commands.
<p>For a larger example (well, okay it's a fair amount larger),
suppose you are working on two projects with two different CVS
repositories. You might want to be able to write a function that
allows you to set appropriate CVSROOT and CVS_ROOT variables, or clear
any values from these variables if the argument unset is given. It
would also be nice if it would run 'cvs update' for you if given the
argument 'update'. With aliases, you could approximate this, but only
by running multiple aliases from the command line. Using functions,
you could create a text file containing the following:
(<A HREF="misc/eyler/setcvs.sh.txt">text version</A>)
<blockquote><code><pre>
setcvs() {
export done="no"
if [ "$1" = "unset" ]
# we want to clear all of the variables
then
echo -n "Clearing cvs related variables: "
export CVSROOT=""
export CVS_RSH=""
export done="yes"
echo "done"
fi
if ( pwd | grep projects/reporting > /dev/null && \
[ "$done" != "yes" ] )
# if we're in the reporting area, and we're not already done
then
echo -n "Setting up cvs for reporting project: "
export CVSROOT="issdata:/usr/local/cvs/"
export CVS_RSH="ssh"
export done="yes"
echo "done"
fi
if ( pwd | grep projects/nightly > /dev/null && \
[ "$done" != "yes" ] )
# if we're in the nightly area, and we're not already done
then
echo -n "Setting up cvs for nightly project: "
export CVSROOT="/home/cvs/"
export done="yes"
echo "done"
fi
if [ "$1" = "update" ]
# we want to update the current tree from the cvs server after
# setting up the right variables
then
if [ -z "$CVSROOT" ]
# if there is a zero length $CVSROOT (it has already been
# cleared or was never set) throw an error and do nothing
then
echo "no cvs variables set ... check your cwd and try again"
elif [ -n "$CVSROOT" ]
# if there is a $CVSROOT try and do the update
then
echo "updating local tree"
cvs -q update
echo "done"
fi
fi
}
</pre></code></blockquote>
<p>Then you could enable the function and use it like this:
<blockquote><code>
<br>$ . ~/scripts/setcvs
<br>$ cd
<br>$ pwd
<br>/home/a257455
<br>$ setcvs unset
<br>Clearing cvs related variables: done
<br>$ echo $CVSROOT
<br>
<br>$ echo $CVS_RSH
<br>
<br>$ cd projects/reporting/htdocs/
<br>$ setcvs
<br>Setting up cvs for reporting project: done
<br>$ echo $CVSROOT
<br>issdata:/usr/local/cvs/
<br>$ echo $CVS_RSH
<br>ssh
<br>$ cd ../../nightly/
<br>$ setcvs
<br>Setting up cvs for nightly project: done
<br>$ setcvs update
<br>Setting up cvs for nightly project: done
<br>updating local tree
<br>done
<br>$ cd
<br>$ setcvs unset
<br>Clearing cvs related variables: done
<br>$ setcvs update
<br>no cvs variables set ... check your cwd and try again
<br>$
</code></blockquote>
<p>Functions can do a lot more than aliases, the function above shows a
little bit of flow control, some error handling, and the ability to
use variables. Certainly it could be improved, but it shows the
point. Another big win is that functions can be re-used in scripts,
while aliases can't. For example, because the function above is saved in
a file called '~/scripts/setcvs' you can write a script like:
<blockquote><code><pre>
#!/bin/bash
# a sample script
# first source the functions
. ~/scripts/setcvs
# now go to the project directories and update them from cvs
cd ~/projects/reporting/htdocs
setcvs update
cd -
cd ~/projects/nightly
setcvs update
# now go back to where you were and unset any cvs variables.
cd -
setcvs unset
</pre></code></blockquote>
<h3>A Final Warning</h3>
<p>Aliases are very useful little things, but I hope that after this
introduction, you find functions at least as interesting (and probably
even more useful). A final caveat to both aliases and functions is
that you should never replace a standard command with an alias or a
function. It is too easy to really hurt yourself by trying to execute
your alias when it doesn't exist. Imagine the difference between:
<blockquote><code><pre>
$ alias rm='rm -i'
$ cd ~/scratch
$ rm * # here the rm alias catches you and interactively
# deletes the contents of your current directory
</pre></code></blockquote>
<br>and then later in the same session doing:
<blockquote><code><pre>
$ su -
# cd /tmp
# rm # here the rm alias no longer exists, and you whack
# a bunch of stuff out of /tmp
</pre></code></blockquote>
<p>Happy hacking!<BR>
-pate
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Pat Eyler<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Linux Site O' The Month: SourceForge</font></H1>
<H4>By <a href="mailto:slambo@linuxstart.com">Sean Lamb</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<h2 ALIGN="center">
SourceForge (<a href="http://sourceforge.net">http://sourceforge.net</a>)<BR>
"Breaking down the barriers to Open Source development"</h2>
<H2>What's This?</H2>
<P> This article is the the current installment in an ongoing series of site
reviews for the Linux community. Each month, I will highlight a Linux-related
site and tell you all about it. The intent of these articles is to let you
know about sites that you might not have been to before, but they will all have
to do with some aspect of Linux. Now, on with the story...
<H2>So you wanna be a developer...</h2>
Now that you've got your Linux box up and running the way you like it, it's
time to start building that killer app. But where do you start? You've got
an idea, and you've already written some code but you're not giving back to the
community until you've released your code for the world to see.
<P>
To get your project out, and to get the feedback that is so essential to help
find bugs and get feature suggestions, you need to first create a project
website. It would be nice to build this site with php and mySQL so you can
add news items through a web form rather than rewriting the page everytime
you wanted to post a little tidbit. You'd also like your project site to
have a short and simple URL, rather than stretching to Timbuktu and back,
peppered with tildes. Your project site needs to link to a download location
where users can get a copy of your code, and you'll need a place to put the
app for the users to download. Next, you need to create mailing lists for
your users and, if you're getting some coding help, your co-developers. Some
of those web forums would be nice too. Then you remember the old adage
"release early and often" and you wonder how you can get your code out to the
masses quicker after you've made changes.
<P>
Whew! That's a pretty tall order for some of the smaller projects. How do
all these developers find the time, servers and money to do all this? One
answer that is becoming more popular is SourceForge.
<h2>Project administration for the masses</h2>
SourceForge brings all of these plus more features together into one location,
and then gives away these services for free to Open Source projects. Projects
hosted at SourceForge receive:
<ul>
<li>100Mb of web space on a server that features php, perl and cgi support.
<LI>mySQL database support.
<LI>a short default URL, http://<i>yourproject</i>.sourceforge.net, and hosting
for any properly registered domain name.
<LI>multiple mailing list administration and hosting.
<LI>working CVS repository; not just a branch in a public CVS tree, but your
own CVSROOT.
<LI>anonymous FTP space for package releases.
<LI>web-based project administration.
<LI>public and private bug trackers.
<LI>public and private discussion forums.
<LI>daily backups with offsite rotation.
</ul>
You may be thinking that you don't need everything that's included to host
your project. Perhaps all you need for your little script is a website.
Well, then just use the website portion of the service. Projects are not
required to use all of the services available at all times. They can use only
the services that they need and let the rest sit until they are needed.
<P>
The great unwashed masses need only a web browser and an internet connection
to get to your project site at SourceForge. The portions that you make public
in your project hosting are available to everyone. The people you designate
as developers connect to your project account with ssh1 (note, ssh2 is not yet
supported at the time this was written), so security is less of a problem.
<h2>Who's doing this and why?</h2>
SourceForge is sponsored by VA Linux Systems. VA is paying for the whole
shebang, so project admins don't need to add a ton of ad banners to their
sites to help support the servers (only a small SourceForge logo is required
on project pages. The site's About page answers the why question:
<blockquote>
"As open source developers ourselves, we have run into the kinds of obstacles
that still plague many would-be developers. It was our intent to remove many
of those obstacles and let developers focus on software development. (An odd
concept, but easier to get used to than you'd think.) A suite of tools isn't
enough, though. In the end, you need the hardware power for the whole setup."
</blockquote>
The list of projects already hosted at SourceForge is impressive. The current
categories include:
<ul>
<LI>Communications (126 projects)
<LI>Database (48 projects)
<LI>Desktop Environment (59 projects)
<LI>Education (34 projects)
<LI>Emulators (5 projects)
<LI>Games/Entertainment (160 projects)
<LI>Internet (169 projects)
<LI>Multimedia (163 projects)
<LI>Office/Business (29 projects)
<LI>Other/Nonlisted Topic (34 projects)
<LI>Printing (12 projects)
<LI>Religion (6 projects)
<LI>Scientific (86 projects)
<LI>Security (22 projects)
<LI>Software Development (174 projects)
<LI>System (166 projects)
<LI>Terminals (12 projects)
<LI>Text Editors (30 projects)
</ul>
<h2>So sign up already!</h2>
With all of these features and services in one place, and to get them all for
free for open source projects, it's easy to see why so many projects have
already signed up. In case you're wondering, the first project to be hosted
at SourceForge is <a
href="http://sourceforge.net/project/?group_id=1">SourceForge</a>.
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Sean Lamb<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Introduction to Shell Scripting</font></H1>
<H4>By <a href="mailto:ben-fuzzybear@yahoo.com">Ben Okopnik</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
Last month, we took a look at some basics of creating a shell script,
as well as a few of the underlying mechanisms that make it all work. This
time around, we'll see how loops and conditional execution let us direct
program flow in scripts, as well as looking at a few good shell-writing
practices.
<br>
<p>CONVENTIONS
<p>The only thing to note in this article are ellipses (...) - I use them
to indicate that the code shown is only a fragment, and not an entire script
all by itself. If it helps, think of each ellipse as one or more lines
of code that is not actually written out.
<br>
<p>LOOPS AND CONDITIONAL EXECUTION
<p>"FOR;DO;DONE"
<p>Often, scripts are written to automate some repetitive task; as a random
example, if you have to repeatedly edit a series of files in a specific
directory, you might have a script that looks like this:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for n in ~/weekly/*.txt</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier"> ae $n</font>
<br><font face="Courier New,Courier">done</font>
<p><font face="Courier New,Courier">echo "Done."</font>
<br>
<hr WIDTH="100%">
<p>or like this:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for n in ~/weekly/*.txt; do ae $n;
done; echo "Done."</font>
<br>
<hr WIDTH="100%">
<p>The code in both does exactly the same thing - but the first version
is much more readable, especially if you're building large scripts with
several levels. As good general practice in writing code, you should indent
each level (the commands inside the loops); it makes troubleshooting and
following your code much easier.
<p>The above control structure is called a 'for' loop - it tests for items
remaining in a list (i.e., 'are there any more files, beyond the ones we
have already read, that fit the "~/weekly/*.txt" template?'). If the test
result is true, it assigns the name of the current item in the list to
the loop variable ("n" in this case) and executes the loop body (the part
between "do" and "done"), then checks again. Whenever the list runs out,
'for' stops looping and passes control to the line following the 'done'
keyword - in our example, the "echo" statement.
<p>A little trick I'd like to mention here. If you want to make the "for"
loop 'spin' a certain number of times, the shell syntax can be somewhat
tiresome:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for i in 1 2 3 4 5 6 7 8 9 10 11 12
13 14 15</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier"> echo $i</font>
<br><font face="Courier New,Courier">done</font>
<br>
<hr WIDTH="100%">
<p>What a pain! If you wanted it to iterate, say, 250 times, you'd have
to type all of that out! Fortunately, there's a 'shortcut' - the "seq"
command, which prints a sequence of numbers from 1 to the given maximum,
e.g.,
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">for i in $(seq 15)</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier"> echo $i</font>
<br><font face="Courier New,Courier">done</font>
<br>
<hr WIDTH="100%">
<p>This is functionally the same as the previous script. "seq" is part
of the GNU "shellutils" package and is probably already installed on your
system. There's also the option of doing this sort of iteration by using
a "while" loop, but it's a bit more tricky.
<br>
<p>"WHILE;DO;DONE"
<p>Often, we need a control mechanism that acts based on a specified condition
rather than iterating through a list. The 'while' loop fills this requirement:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">pppd call provider &</font>
<p><font face="Courier New,Courier">while [ -n "$(ping -c 1 192.168.0.1|grep
100%)" ]</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier"> echo "Connecting..."</font>
<br><font face="Courier New,Courier">done</font>
<p><font face="Courier New,Courier">echo "Connection established."</font>
<br>
<hr WIDTH="100%">
<p>The general flow of this script is: we invoke "pppd", the PPP paenguin...
I mean, daemon :), then keep looping until an actual connection is established
(if you want to use this script, replace 192.168.0.1 with your ISPs IP
address). Here are the details:
<p>1) The "ping -c 1 xxx.xxx.xxx.xxx" command sends a single ping to the
supplied IP address; note that it has to be an IP address and not a URL
- "ping" will fail immediately due to lack of DNS otherwise. If there's
no response within 10 seconds, it will print something like
<br>
<p><font face="Courier New,Courier">PING xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx):
56 data bytes</font>
<br><font face="Courier New,Courier">ping: sendto: Network is unreachable</font>
<br><font face="Courier New,Courier">ping: wrote xxx.xxx.xxx.xxx 64 chars,
ret=-1</font>
<p><font face="Courier New,Courier">--- xxx.xxx.xxx.xxx ping statistics
---</font>
<br><font face="Courier New,Courier">1 packets transmitted, 0 packets received,
100% packet loss</font>
<br>
<p>2) The only line we're interested in is the one that gives us the packet
loss percentage; with a single packet, it can only be 0% (i.e., a
successful ping) or 100%. By piping the output of "ping" through the "grep
100%" command, we narrow it down to that line, if the loss is indeed 100%;
a 0% loss will not produce any output. Note that the "100%" string isn't
anything special: we could have used "ret=-1", "unreachable", or anything
else that's unique to a failure response.
<p>3) The square brackets that contain the statement are a synonym for
the 'test' command, which returns '0' or '1' (true or false) based on the
evaluation of whatever's inside the brackets. The '-n' operator returns
'true' if the length of a given string is greater than 0. Since the string
is assumed to be contiguous (no spaces), and the line we're checking for
is not, we need to surround the output in double quotes - this is a technique
that you will use again and again in script writing. Do note that the square
brackets require spaces around them - i.e., <font face="Courier New,Courier">[-n
$STRING]</font> won't work; <font face="Courier New,Courier">[ -n $STRING
]</font> is correct. For more info on the operators used with 'test',
type "help test"; a number of very useful ones are available.
<p>4) As long as the above test returns "true" (i.e., as long as the "ping"
fails), the 'while' loop will continue to execute - by printing the
"Connecting..." string every ten seconds. As soon as a single ping is successful
(i.e., the test returns "false"), the 'while' loop will break and pass
control to the statement after "done".
<br>
<p>"UNTIL;DO;DONE"
<p>The 'until' loop is the reverse of the 'while' - it continues to loop
as long as the test is false, and fails when it becomes true. I've never
had the occasion to use it; the 'while' loop and the flexibility of the
available tests have sufficed for everything I've needed so far.
<br>
<p>"IF;THEN;[ELSE];FI"
<p>There are many times when we just need to check for the existence of
a condition and branch the execution based on the result. For those times,
we have the 'if' statement:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">...</font>
<p><font face="Courier New,Courier">if [ $BOSS="jerk" ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier"> echo 'Take this
job and shove it!'</font>
<br><font face="Courier New,Courier">else</font>
<br><font face="Courier New,Courier"> echo 'Stick around;
the money is good.'</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">...</font>
<br>
<hr WIDTH="100%">
<p><grin> I guess it's not quite that easy... but the logic makes sense.
Anyway, if a variable called BOSS has been defined as "jerk" (C programmers
take note: '=' and '==' are equivalent in a test statement - no assignment
occurs), then the first 'echo' statement will be executed. In all other
cases, the second 'echo' statement will run (if $BOSS="idiot", you'll still
be working there. Sorry about that. :). Note that the 'else' statement
is optional, as in this script fragment:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">...</font>
<p><font face="Courier New,Courier">if [ -n $ERROR ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier"> echo 'Detected
an error; exiting.'</font>
<br><font face="Courier New,Courier"> exit</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">...</font>
<br>
<hr WIDTH="100%">
<p>This routine will obviously exit if the ERROR variable is anything other
than empty - but it will not affect the program flow otherwise.
<br>
<p>"CASE;IN;;ESAC"
<p>The remaining tool that we can use for conditional branching is basically
a multiple 'if' statement, based on the evaluation of a test. If, for example,
we know that the only possible outputs from an imaginary program called
'intel_cpu_test' are 4, 8, 16, 32, or 64, then we can write the following:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">case $(intel_cpu_test) in</font>
<br><font face="Courier New,Courier"> 4) echo "You're
running Linux on a calculator??";;</font>
<br><font face="Courier New,Courier"> 8) echo "That 8088
is past retirement age...";;</font>
<br><font face="Courier New,Courier"> 16) echo "A 286
kinda guy, are you?";;</font>
<br><font face="Courier New,Courier"> 32) echo "One of
them new-fangled gadgets!";;</font>
<br><font face="Courier New,Courier"> 64) echo "Oooh...
serious CPU envy!";;</font>
<br><font face="Courier New,Courier"> *) echo "What
the heck are you running, anyway?";;</font>
<br><font face="Courier New,Courier">esac</font>
<br>
<hr WIDTH="100%">
<p>(Before all you folks flood me with mail about running Linux on a 286
or an 8088... you can't run it on a calculator either. :)
<p>Obviously, the "*" at the end is a catch-all: if someone at
the Intel Secret Lab runs this on their new CPU (code name "UltraSuperHyperWhizBang"),
we want the script to come back with a controlled response rather than
a failure. Note the double semicolons - they 'close' each of the "pattern/command"
sets and are (for some reason) a common error in "case/esac" constructs.
Pay extra attention to yours!
<br>
<p>BREAK and CONTINUE
<p>These statements interrupt the program flow in specific ways. The
"break", once executed, immediately exits the enclosing loop; the
"continue" statement skips the current loop iteration. This is useful in a
number of situations, particularly in long loops where the existence of a
given condition makes all further tests unnecessary. Here's a long (but
hopefully understandable) pseudo-example:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">...</font>
<p><font face="Courier New,Courier">while [ hosting_party ]</font>
<br><font face="Courier New,Courier">do</font>
<br><font face="Courier New,Courier"> case $FOOD_STATUS</font>
<br><font face="Courier New,Courier"> in</font>
<br><font face="Courier New,Courier">
potato_chips_gone) replace_potato_chips;;</font>
<br><font face="Courier New,Courier">
peanuts_finished) refill_peanut_bowl;;</font>
<br><font face="Courier New,Courier">
pretzels_gone) open_new_pretzel_bag;;</font>
<br><font face="Courier New,Courier">
...</font>
<br><font face="Courier New,Courier">
...</font>
<br><font face="Courier New,Courier"> esac</font>
<br>
<p><font face="Courier New,Courier"> if [ police_on_scene
]</font>
<br><font face="Courier New,Courier"> then</font>
<br><font face="Courier New,Courier">
talk_to_nice_officers</font>
<br><font face="Courier New,Courier">
continue</font>
<br><font face="Courier New,Courier"> fi</font>
<p><font face="Courier New,Courier"> case $LIQUOR_STATUS</font>
<br><font face="Courier New,Courier"> in</font>
<br><font face="Courier New,Courier">
vodka_gone) open_new_vodka_bottle;;</font>
<br><font face="Courier New,Courier">
rum_gone) open_new_rum_bottle;;</font>
<br><font face="Courier New,Courier">
...</font>
<br><font face="Courier New,Courier">
...</font>
<br><font face="Courier New,Courier"> esac</font>
<p><font face="Courier New,Courier"> case $ANALYZE_GUEST_BEHAVIOR</font>
<br><font face="Courier New,Courier"> in</font>
<br><font face="Courier New,Courier">
lampshade_on_head) echo "He's been drinking";;</font>
<br><font face="Courier New,Courier">
talking_to_plants) echo "She's been smoking";;</font>
<br><font face="Courier New,Courier">
talking_to_martians) echo "They're doing LSD";;</font>
<br><font face="Courier New,Courier">
levitating_objects) echo "Who spiked my lemonade??";;</font>
<p><font face="Courier New,Courier"> ...</font>
<p><font face="Courier New,Courier"> ...</font>
<p><font face="Courier New,Courier"> ...</font>
<p><font face="Courier New,Courier"> esac</font><font face="Courier New,Courier"></font>
<p><font face="Courier New,Courier">done</font>
<p><font face="Courier New,Courier">echo "Dude... what day is it?"</font>
<br>
<hr WIDTH="100%">
<p>A couple of key points: note that in checking the status of various
party supplies, you might be better off writing multiple "if" statements
- both potato chips <b>and</b> pretzels may run out at the same time (i.e.,
they are not mutually exclusive). The way it is now, the chips have
top priority; if two items do run out simultaneously, it will take two
loops to replace them.
<p>We can keep checking the food status while trying to convince the cops
that we're actually holding a stamp-collectors' meeting (in fact, maintaining
the doughnut supply is a crucial factor at this point), but we'll skip
right past the liquor status - as it was, we got Joe down off the chandelier
just in time...
<p>The "continue" statement skips the last part of the "while" loop as
long as the "police_on_scene" function returns 'true'; essentially, the
loop body is truncated at that point. Note that even though it is actually
inside the "if" construct, it affects the loop that surrounds it:
both "continue" and "break" apply only to loops, i.e., "for", "while",
and "until" constructs.
<br>
<br>
<p>BACK TO THE FUTURE
<p>Here is the script we created last month:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<br><font face="Courier New,Courier"># "bkup" - copies specified files
to the user's ~/Backup</font>
<br><font face="Courier New,Courier"># directory after checking for name
conflicts.</font>
<p><font face="Courier New,Courier">a=$(date +%T-%d_%m_%Y)</font>
<br><font face="Courier New,Courier">cp -i $1 ~/Backup/$1.$a</font>
<br>
<hr WIDTH="100%">
<p>Interestingly enough, shortly after finishing last month's article,
I was cranking out a bit of C code on a machine that didn't have 'rcs'
(the GNU Revision Control System) installed - and this script came in very
handy as a 'micro-rcs'; I used it to take "snapshots" of the project status.
Simple, generalized scripts of this sort become very useful at odd times...
<br>
<p>ERROR CHECKING
<p>The above is a workable script - for you, or anyone who cares to read
and understand it. Let's face it, though: what we want from a program or
a script is to type the name and have it work, right? That, or tell us
exactly why it didn't work. In this case, though, what we get is a somewhat
cryptic message:
<p><font face="Courier New,Courier">cp: missing destination file Try `cp
--help' for more information.</font>
<p>For everyone else, and for ourselves down the road when we forget exactly
how to use this tremendously complex script with innumerable options :),
we need to put in error checking - specifically, syntax/usage information.
Let's see how what we've just learned might apply:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">if [ -z $1 ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier"> clear</font>
<br><font face="Courier New,Courier"> echo "'bkup' -
copies the specified file to the user's"</font>
<br><font face="Courier New,Courier"> echo "~/Backup
directory after checking for name conflicts."</font>
<br><font face="Courier New,Courier"> echo</font>
<br><font face="Courier New,Courier"> echo "Usage: bkup
filename"</font>
<br><font face="Courier New,Courier"> echo</font>
<br><font face="Courier New,Courier"> exit</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">a=$(date +%T-%d_%m_%Y)</font>
<br><font face="Courier New,Courier">cp -i $1 ~/Backup/$1.$a</font>
<p>
<hr WIDTH="100%">
<p>The '-z' operator of 'test' returns '0' (true) for a zero-length string;
what we're testing for is 'bkup' being run without a filename. The very
beginning is, in my opinion, the best place to put help/usage information
in a script - if you forget what the options are, just run the script without
any, and you'll get an instant 'refresher course' in using it. You don't
even have to put in the original comments, now - note that we've basically
incorporated our earlier comments into the usage info. It's still a good
idea to put in comments at any non-obvious or tricky places in the script
- that brilliant trick you've managed to pull off may cause you to cuss
and scratch your head next year, if you don't...
<p>Before we wrap up playing with this script, let's give it a few more
capabilities. What if you wanted to be able to send different types of
files into different directories? Let's give that a shot, using what we've
learned:
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">#!/bin/bash</font>
<p><font face="Courier New,Courier">if [ -z $1 ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier"> clear</font>
<br><font face="Courier New,Courier"> echo "'bkup' -
copies the specified file to the user's ~/Backup"</font>
<br><font face="Courier New,Courier"> echo "directory
tree after checking for name conflicts."</font>
<br><font face="Courier New,Courier"> echo</font>
<br><font face="Courier New,Courier"> echo "Usage: bkup
filename [bkup_dir]"</font>
<br><font face="Courier New,Courier"> echo</font>
<br><font face="Courier New,Courier"> echo "bkup_dir
Optional subdirectory in '~/Backup' where the file"</font>
<br><font face="Courier New,Courier"> echo " will be
stored."</font>
<br><font face="Courier New,Courier"> echo</font>
<br><font face="Courier New,Courier"> exit</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">if [ -n $2 ]</font>
<br><font face="Courier New,Courier">then</font>
<br><font face="Courier New,Courier"> if [ -d ~/Backup/$2
]</font>
<br><font face="Courier New,Courier"> then</font>
<br><font face="Courier New,Courier">
subdir=$2/</font>
<br><font face="Courier New,Courier"> else</font>
<br><font face="Courier New,Courier">
mkdir -p ~/Backup/$2</font>
<br><font face="Courier New,Courier">
subdir=$2/</font>
<br><font face="Courier New,Courier"> fi</font>
<br><font face="Courier New,Courier">fi</font>
<p><font face="Courier New,Courier">a=$(date +%T-%d_%m_%Y)</font>
<br><font face="Courier New,Courier">cp -i $1 ~/Backup/$subdir$1.$a</font>
<p>
<hr WIDTH="100%">
<p>Here is the summary of changes:
<p>1) The comment section of the help now reads "...directory tree" rather
than just "directory", indicating the change we've made.
<p>2) The "Usage:" line has been expanded to show the optional (as shown
by the square brackets) argument; we've also added an explanation
of how to use that argument, since it might not be obvious to someone else.
<p>3) An added "if" construct that checks to see if $2 (a second argument
to 'bkup') exists; if so, it checks for a directory with the given name
under "~/Backup", and creates one if it does not exist (the "-d" tests
if the file exists and is a directory).
<p>4) The 'cp' command now has a 'subdir' variable tucked in between "Backup/"
and "$1".
<p>Now, you can type things like
<p><font face="Courier New,Courier">bkup my_new_program.c c</font>
<br><font face="Courier New,Courier">bkup filter.awk awk</font>
<br><font face="Courier New,Courier">bkup filter.awk filters</font>
<br><font face="Courier New,Courier">bkup Letter_to_Mom.txt docs</font>
<p>etc., and sort everything into whatever categories you like. Plus, the
old behavior of "bkup" is still available -
<p><font face="Courier New,Courier">bkup file.xyz</font>
<p>will send a backup of "file.xyz" to the "~/Backup" directory itself;
useful for files that fall outside of your sorting criteria.
<br>
<p>By the way: why are we appending a "/" to $2 in the "if" statement instead
of right in the "cp" line? Well, if $2 <u>doesn't</u> exist, then then
we want 'bkup' to act as it did originally, i.e., send the file to the
"Backup" directory. If we write something like
<p><font face="Courier New,Courier">cp -i $1 ~/Backup/$subdir/$1.$a</font>
<p>(note the extra "/" between $subdir and $1), and $2 isn't specified,
then $subdir becomes blank, and the line above becomes
<p><font face="Courier New,Courier">cp -i $1 ~/Backup//$1.$a</font>
<p>- not a particularly desirable result, since we want to stick with standard
shell syntactic practice wherever possible.
<p>In fact, it's a really good idea to consider all the possibilities whenever
you're building variables into a string; a classic mistake of that sort
can be seen in the following script -
<p>
<hr WIDTH="100%">
<br><font face="Courier New,Courier">DO NOT USE THIS SCRIPT!</font>
<p><font face="Courier New,Courier">#!/bin/bash</font>
<br><font face="Courier New,Courier"># Written by Larry, Moe, and Shemp
- the Deleshun PoWeR TeaM!!!</font>
<br><font face="Courier New,Courier"># Checked by Curly: "Why, soitainly
it woiks! Nyuk-nyuk-nyuk!"</font>
<p><font face="Courier New,Courier"># All you've gotta do is enter the
name of this file followed by</font>
<br><font face="Courier New,Courier"># whatever you want to delete - directories,
dot files, multiple</font>
<br><font face="Courier New,Courier"># files, anything is OK!</font>
<p><font face="Courier New,Courier">rm -rf $1*</font>
<p><font face="Courier New,Courier">DO NOT USE THIS SCRIPT!</font>
<br>
<hr WIDTH="100%">
<p><Sigh> At least they commented it. :)
<p>What happens if somebody does run "<font face="Courier New,Courier">three_stooges</font>",
and <u>doesn't enter a parameter</u>? The active line in the script becomes
<p><font face="Courier New,Courier">rm -rf *</font>
<p>Assuming that you're Joe User in your home directory, the result is
pretty horrible - it'll wipe out all of your personal files. It becomes
a catastrophe if you're the root user in the root directory - <b>the entire
system goes away</b>!!
<p>Viruses seem like such friendly, harmless things about now... <grin>
<p>Be careful with your script writing. As you have just seen, you have
the power to destroy your entire system in a blink.
<p>
<hr SIZE=4 WIDTH="100%">
<br><font face="Courier New,Courier">Unix was never designed to keep people
from doing stupid things,</font>
<br><font face="Courier New,Courier">because that policy would also keep
them from doing clever things.</font>
<br><font face="Courier New,Courier">-- Doug Gwyn</font>
<p><font face="Courier New,Courier">Unix gives you just enough rope to
hang yourself -- and then a</font>
<br><font face="Courier New,Courier">couple more feet, just to be sure.</font>
<br><font face="Courier New,Courier">-- Eric Allman</font>
<br>
<hr SIZE=4 WIDTH="100%">
<p>The philosophy makes sense: unlimited power in the tools, restriction
by permissions - but it imposes a responsibility: you must take appropriate
care. As a corollary, whenever you're logged in as root, do not run any
shell scripts that are not provably harmless (note the Very Large assumptions
hanging off that phrase - "<u>provably harmless</u>"...)
<br>
<p>WRAPPING IT UP
<p>Loops and conditional execution are a very important part of most scripts.
As we analyze other shell scripts in future articles, you'll see some of
the myriad ways in which they can be used - a script of even average complexity
cannot exist without them.
<p>Next month, we'll take a look at some tools that are commonly used in
shell scripts - tools that may be very familiar to you as command-line
utilities - and explore how they may be connected together to produce desired
results. We'll also dissect a couple of scripts - mine, if no one else
is brave enough to send in the results of their keyboard concoctions. (<font color="#FF0000">Be
Afraid. Be Very Afraid.</font>) :)
<br>
<p>I welcome all comments and corrections in regard to this series of articles,
as well as any interesting scripts that you may send in. All flames will
be sent to <font face="Courier New,Courier">/dev/null</font> (Oh no, it's
full...)
<br>
<p>Until next month -
<p>Happy Linuxing!
<br>
<p>
<hr WIDTH="100%">
<br>"SCRIPT QUOTE" OF THE MONTH:
<p><font face="Courier New,Courier">``What's this script do?</font>
<p><font face="Courier New,Courier">'unzip; touch; finger; mount; gasp;
yes; umount; sleep'</font>
<p><font face="Courier New,Courier">Hint for the answer: not everything
is computer-oriented. Sometimes you're in a sleeping bag, camping out with
your girlfriend.''</font>
<br><font face="Courier New,Courier"> -- Frans van der Zande</font>
<br>
<hr WIDTH="100%">
<p>REFERENCES
<p><font face="Courier New,Courier">The "man" pages for 'bash', 'seq',
'ping', 'grep'</font>
<br><font face="Courier New,Courier">The "help" command for 'for', 'while',
'until', 'if', 'case', 'test',</font>
<br><font face="Courier New,Courier">'break', 'continue'</font>
<br><font face="Courier New,Courier">"Introduction to Shell Scripting -
The Basics" by Ben Okopnik, LG #53</font>
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Ben Okopnik<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Setting Up International Keyboards</font></H1>
<H4>By <a href="mailto:xvudpapc@savba.sk">Juraj Sipos</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<p><font face="Courier New,Courier"><font size=-1>This xmodmap and kimap
solutions will work for you in setting up any international keyboard for
(Debian, RedHat, Mandrake, Corel Linux) Linux, FreeBSD, OpenBSD, NetBSD
and possibly every Unix that uses Xfree86 and KDE. The advantage of this
package is that it is not architecture specific and will work on SPARK,
MIPS and all other systems. I don't want to say that other packages are
architecture independent, but I don't like writing garbage in the bash_profile
and XF86Config or possibly somewhere else. This was written by Juraj Sipos
(c) on 4/22/2000, <a href="mailto:xvudpapc@savba.sk">xvudpapc@savba.sk</a></font></font>
<p><font face="Courier New,Courier"><font size=-1>INTRODUCTION</font></font>
<p><font face="Courier New,Courier"><font size=-1>Imagine you use Linux
or a BSD OS and want to write a business letter to a person that has a
foreign name with a slash or idiaresis. Danish language uses signs like
ø and Portuguese like ñ. With this information you can make
your own international keyboard layout without installing any additional
packages. The following information will help you set up German, Spanish,
Italian, Slovak, Czech, Polish, Slovenian, Croatian, Danish, Dutch, French,
Finnish, Norwegian, Estonian, Latvian, Swedish and other keyboards without
additional installing of national packages and without writing garbage
to bash_profile and XF86Config files. You can also alternatively look at
my homage at <a href="http://www.home.sk/www/man/bsd1.htm">http://www.home.sk/www/man/bsd1.htm</a></font></font>
<br><font face="Courier New,Courier"><font size=-1>to see pictures of various
keyboards. In case you want to install Greek, Hebrew or Russian language,
follow my information and apply changes pertinent to these languages (e.g.,
to install Greek fonts, etc.).</font></font>
<p><font face="Courier New,Courier"><font size=-1>The biggest problem with
kikbd or international keyboard under KDE in X Windows is that it doesn't
work in Xfree86 that easily (you have to install some national packages
and write garbage with complicated syntax to the above-mentioned files).
A user expects a simple way for configuring his or her keyboard for international
settings. A simple way is to start KDE, change the international keyboard
settings and immediately write in the language we chose (this will work
for German and other languages, but in Eastern European keyboards some
letters don't function). According to the KDE documentation it should work,
but it doesn't. After exploring many KDE resources on the net, I didn't
find a solution (except for the one that forces you to install some national
package). I know that some locale settings should be included in my bash_profile
or csh logic scripts, but after applying these settings I couldn't change
(and install) keyboards in FreeBSD and it appeared like going through a
darker forest compared to the information I already had regarding localization
of KDE and X Windows under Xfree86.</font></font>
<p><font face="Courier New,Courier"><font size=-1>Here are some solutions
for installing international keyboard layouts. The following information
will help you set up any European keyboard layout. The solution works for
Xfree86 in 3.1 RELEASE in FreeBSD (.Xmodmap solution), Corel Linux, Debian
Linux, RedHat and FreeBSD 3.3 RELEASE and 4.0 RELEASE (KDE *.kimap solution).
I tested it on those systems. Note: .Xmodmap solution works well with other
windows managers. Some Unixes override .Xmodmap setting when used with
KDE. If .Xmodmap doesn't work, change must be made to the KDE kimap files
in .../kikbd directory.</font></font>
<p><font face="Courier New,Courier"><font size=-1>If .Xmodmap solution
doesn't work in KDE, copy skz.kimap (at the end of this article) to /usr/local/share/apps/kikbd,
which is your KDE keyboard directory. The problem with KDE is that after
installing another keyboard, you have no chance to use it as KDE documentation
doesn't clearly state how to define your locale settings in a bash_profile.
After I installed Slovak keyboard in KDE, I couldn't write in Slovak or
Czech, so I made few changes to skz.kimap file, which are explained later
in this file. After applying these changes, no other changes are necessary
- you don't need to write any special commands to your bash_profile or
XF86Config. BUT WHEN YOU INSTALL ANOTHER KEYBOARD in START/SETTINGS/INPUT
DEVICES/INTERNATIONAL KEYBOARDS from your KDE menu, CHECK AUTOSTART. Then
everything will work fine. The difference between skz.kimap and sky.kimap
(and csz.kimap and csy.kimap) is that y,Y and z,Z are swapped, so with
skz.kimap or csz.kimap you will have z,Z instead of y,Y, but with sky.kimap
or csy.kimap, y,Y doesn't change its position on the IBM English keyboard
layout.</font></font>
<p><font face="Courier New,Courier"><font size=-1>How it all works:</font></font>
<p><font face="Courier New,Courier"><font size=-1>a) Copy the "Compose"
file from /usr/X11R6/lib/X11/locale/iso8859-2 to:</font></font>
<br><font face="Courier New,Courier"><font size=-1> /usr/X11R6/lib/X11/locale/iso8859-1
directory (yes, iso8859-1, not iso8859-2). Back up</font></font>
<br><font face="Courier New,Courier"><font size=-1> the original
"Compose" file if you want (alternatively, copy other iso885*** Compose</font></font>
<br><font face="Courier New,Courier"><font size=-1> file to
iso8859-1 directory).</font></font>
<br><font face="Courier New,Courier"><font size=-1>b) Put the included
.Xmodmap file to your root directory (Slovak language, or make your own</font></font>
<br><font face="Courier New,Courier"><font size=-1> .Xmodmap
file) (or possibly put your own *.kimap file to the kikbd directory if
Xmodmap</font></font>
<br><font face="Courier New,Courier"><font size=-1> will not
work)</font></font>
<br><font face="Courier New,Courier"><font size=-1>c) Install ISO8859-2
fonts (or other pertinent fonts).</font></font>
<br><font face="Courier New,Courier"><font size=-1>d) Disable every "Scroll
lock" uncommented line in your XF86Config, because our .Xmodmap</font></font>
<br><font face="Courier New,Courier"><font size=-1> uses scroll
lock to switch between keyboards.</font></font>
<br><font face="Courier New,Courier"><font size=-1>e) Put the appropriate
fontpath for your newly installed fonts in your XF86Config file, if</font></font>
<br><font face="Courier New,Courier"><font size=-1> necessary.</font></font>
<p><font face="Courier New,Courier"><font size=-1>The .Xmodmap solution
may be applied to all X keyboards except Hebrew, I suppose (I'm joking).
The .Xmodmap file overrides all settings of keyboard layouts as defined
in /usr/X11R6/lib/X11/xkb/symbols/, where are symbols for many international
keyboards. The .Xmodmap solution will give you an enhanced Slovak typewriter
keyboard layout.</font></font>
<p><font face="Courier New,Courier"><font size=-1>First, I must say that
in my solution, different mapping is used for .Xmodmap file (and kimap
file) for some ISO definitions. This means that the ISO definitions will
either give you what they say they are (aacute [á], eacute [é],
etc.), or they will not give you what they say they are (putting "threequarters"
in your .Xmodmap file will give not give you "3/4" but "z" with a caron
above it). For example, "mu" will give lcaron, "oslash" rcaron, etc. (Obviously,
in other case you need to install some national packages to use "lcaron"
definition instead of "mu"). Normally, you can not put "lcaron" to the
.Xmodmap file, because it will not give you lcaron; you must write "mu"
instead, or "guillemotright" for tcaron. I also tried hexadecimal numbers
and they work. However, other key definitions, for example, adieresis
(a with two dots above it), uacute (u with slash above it), as well as
dead_diaeresis do not require a substitution of other definitions and work
pretty well as they're defined everywhere (dead key is a key you
press, you hold it and nothing happens, but after pressing another key
you will get a special letter). The original "Compose" file in .../iso8859-1
directory can be fully utilized for Slovak or Czech keyboard layouts (Polish,
Hungarian, Slovenian, Croatian), but there is only one problem with the
Slovak or Czech keyboard (and other languages too) layout - dead_caron
doesn't work. That's why you have to copy the "Compose" file from the iso8859-2
directory to iso8859-1 directory, or alternatively, you can edit the "Compose"
file in iso8859-1 directory and put all references about "dead_caron" from
iso8859-2/Compose to iso8859-1/Compose file.</font></font>
<p><font face="Courier New,Courier"><font size=-1>You can leave the Keyboard
section in your XF86Config without much change. Put (if it's not already
there) the following in the "Keyboard" section:</font></font>
<p><font face="Courier New,Courier"><font size=-1>Section "Keyboard"</font></font>
<br><font face="Courier New,Courier"><font size=-1>Protocol "Standard"</font></font>
<br><font face="Courier New,Courier"><font size=-1>XkbRules "xfree86"</font></font>
<br><font face="Courier New,Courier"><font size=-1>XkbModel "pc101"</font></font>
<br><font face="Courier New,Courier"><font size=-1>XkbLayout "us"</font></font>
<p><font face="Courier New,Courier"><font size=-1>Some X Windows managers
and/or environments override .Xmodmap settings, so if you use KDE and .Xmodmap
doesn't work, use kikbd keymap instead of .Xmodmap. (A sample kikbd kimap
for the Slovak language is included at the bottom of this file). The Slovak/Czech/English
keyboard layout is switched to by scroll lock with .Xmodmap. You
may use languages only with the applications that have access to your ISO-8859-2
(or other fonts) fonts (this may not work with StarOffice or with other
applications that have their own built-in fonts). StarOffice has its own
fonts directory - afm fonts in ../xp3/fontmetrics/afm, and ps fonts in
../xp3/pssoftfonts, so you must add the ISO8859-2 fonts directory to these
directories (to tell StarOffice to use these fonts too) and edit fonts.dir
file and add the symlinked fonts there. I can easily use any language in
StarOffice.</font></font>
<p><font face="Courier New,Courier"><font size=-1>Important note: If you
want to exchange documents between StarOffice or WordPerfect and MS Word,
you must include the information about windows 1250 encoding to the file
you write (win1250 is similar to iso8859-2, but it's a little bit different).
There's a solution: use a converter from iso8859-2 to win1250 (you can
find one at my home page at <a href="http://www.home.sk/www/man/bsd1.htm">http://www.home.sk/www/man/bsd1.htm</a>).</font></font>
<p><font face="Courier New,Courier"><font size=-1>If you want to edit and
make your own .Xmodmap keyboard layout definitions, I'll explain one line
of the .Xmodmap file to make clear what you should do. This explanation
can be used for all keycodes.</font></font>
<p><font face="Courier New,Courier"><font size=-1>For example, the line:</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x11 = 8 asterisk
aacute 8</font></font>
<p><font face="Courier New,Courier"><font size=-1>(note: keycode 0x11 is
derived from xkeycaps utility)</font></font>
<br><font face="Courier New,Courier"><font size=-1>says that the first
pair, the default one, (number "8" and "asterisk") will display number
"8" when you press keycode 0x11 ("8"), will display asterisk when a "shift"
key is pressed. After pressing the scroll lock, there's another definition:
ISO_NEXT_GROUP, which means that when you press the default "8" key, no
"8" will be displayed, but aacute ("á"), when you press the "shift"
key, number "8" will be displayed. So if you change "aacute" and "8", anything
you put instead of "aacute" and "8" will be displayed, for example:</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x11 = 8 asterisk
semicolon colon</font></font>
<p><font face="Courier New,Courier"><font size=-1>will give you "semicolon"
and "colon" in your 0x11 keycode after pressing the scroll lock. If you
delete the ISO_NEXT_GROUP (the next pair of definitions on the right),
you will have only one group of keyboard definitions ("8" and "asterisk").
Be careful when editing the .Xmodmap file. You mustn't delete definitions
that enable utilization of the scroll lock unless you know what you are
doing. These are the lines such as:</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x4e = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>add mod5 = ISO_Next_Group</font></font>
<p><font face="Courier New,Courier"><font size=-1>etc. You must also keep
in mind that Unixes are case sensitive.</font></font>
<p><font face="Courier New,Courier"><font size=-1>If you want to find out
more about keycodes, install a package "xkeycaps".</font></font>
<p><font face="Courier New,Courier"><font size=-1>________________cut_here__________________________________________________</font></font><font face="Courier New,Courier"><font size=-1></font></font>
<p><font face="Courier New,Courier"><font size=-1>! This is an `xmodmap'
input file for PC 101 key #2 (FreeBSD/XFree86; US)</font></font>
<br><font face="Courier New,Courier"><font size=-1>! keyboards created
by XKeyCaps, modified by Juraj Sipos on 8/17/1999.</font></font>
<br><font face="Courier New,Courier"><font size=-1>! XKeyCaps 2.38 is Copyright
(c) 1997 Jamie Zawinski <jwz@netscape.com.</font></font>
<br><font face="Courier New,Courier"><font size=-1>! http://people.netscape.com/jwz/xkeycaps/
This is an .Xmodmap solution for</font></font>
<br><font face="Courier New,Courier"><font size=-1>! Slovak keyboard. You
must have ISO-8859-2 fonts installed with a</font></font>
<br><font face="Courier New,Courier"><font size=-1>! pointer in /etc/XF86Config</font></font>
<br><font face="Courier New,Courier"><font size=-1>! <b>NOTE: "!" is a
comment. Some information follows but I deleted</b></font></font>
<br><font face="Courier New,Courier"><font size=-1>!<b> it as it is commented
and not important.</b></font></font>
<br><font face="Courier New,Courier"><font size=-1>! If you want to know
what I deleted, start xkeycaps utility and generate your</font></font>
<br><font face="Courier New,Courier"><font size=-1>! own Xmodmap file.</font></font>
<br><font face="Courier New,Courier"><font size=-1>! The "0 Ins" key generates
KP_Insert and KP_0</font></font>
<br><font face="Courier New,Courier"><font size=-1>! The ". Del" key generates
KP_Delete and KP_Decimal</font></font>
<p><font face="Courier New,Courier"><font size=-1>!#define XK_dead_semivoiced_sound
0xFE5F</font></font>
<p><font face="Courier New,Courier"><font size=-1>!dead_iota, dead_voiced_sound,
dead_belowdot, dead_tilde, dead_macron</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x09 = Escape</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x43 = F1 F11
F1 Multi_key</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x44 = F2 F12
F2 F12</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x45 = F3 F13
F3 F13 idiaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x46 = F4 F14
F4 F14 mu yen</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x47 = F5 F15
F5 F15 guillemotright guillemotleft</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x48 = F6 F16
F6 F16 ograve</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x49 = F7 F17
F7 dead_abovedot oacute</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4A = F8 F18
F8 dead_breve acute</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4B = F9 F19
F9 dead_cedilla ugrave</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4C = F10 F20
F10 dead_ogonek</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x5F = F11 F21
dead_acute dead_caron</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x60 = F12 F22
dead_abovering dead_diaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>!keycode 0x6F = Print
Execute dead_doubleacute dead_circumflex</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6F = Print
Execute dead_iota</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4E = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6E = Pause</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x31 = grave
asciitilde semicolon dead_diaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0A = 1 exclam
plus 1</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0B = 2 at
mu 2</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0C = 3 numbersign
onesuperior 3</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0D = 4 dollar
egrave 4</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0E = 5 percent
0x0bb 5</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x0F = 6 asciicircum
threequarters 6</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x10 = 7 ampersand
yacute 7</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x11 = 8 asterisk
aacute 8</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x12 = 9 parenleft
iacute 9</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x13 = 0 parenright
eacute 0</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x14 = minus
underscore equal percent</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x15 = equal
plus dead_acute dead_caron</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x33 = backslash
bar ograve parenright</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x16 = BackSpace</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6A = Insert</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x61 = Home</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x63 = Prior</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4D = Num_Lock
Pointer_EnableKeys</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x70 = KP_Divide
slash</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3F = KP_Multiply
asterisk</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x52 = KP_Subtract
minus</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x17 = Tab ISO_Left_Tab</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x18 = q Q</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x19 = w W</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1A = e E</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1B = r R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1C = t T</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1D = y Y z
Z</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1E = u U</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x1F = i I</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x20 = o O</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x21 = p P</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x22 = bracketleft
braceleft acute slash</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x23 = bracketright
braceright diaeresis parenleft</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x24 = Return</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6B = Delete</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x67 = End</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x69 = Next</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x4F = KP_Home
7 KP_Home</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x50 = KP_Up
8</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x51 = KP_Prior
9</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x56 = KP_Add
plus</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x42 = Caps_Lock</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x26 = a A</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x27 = s S</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x28 = d D</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x29 = f F</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2A = g G</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2B = h H</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2C = j J</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2D = k K</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2E = l L</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x2F = semicolon
colon ocircumflex quotedbl</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x30 = apostrophe
quotedbl section exclam</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x53 = KP_Left
4</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x54 = KP_Begin
5</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x55 = KP_Right
6</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x32 = Shift_L
ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x34 = z Z y
Y</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x35 = x X</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x36 = c C</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x37 = v V</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x38 = b B</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x39 = n N</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3A = m M</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3B = comma
less comma question</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3C = period
greater period colon</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3D = slash
question minus underscore</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x3E = Shift_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x62 = Up</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x57 = KP_End
1</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x58 = KP_Down
2</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x59 = KP_Next
3</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6C = KP_Enter
Return</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x25 = Control_L
ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>!keycode 0x40 = Alt_L
Meta_L</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x40 = Meta_L
Alt_L</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x41 = space</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x71 = Alt_R
Meta_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x6D = Control_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x64 = Left</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x68 = Down</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x66 = Right</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x5A = KP_Insert
0</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x5B = KP_Delete
period</font></font>
<p><font face="Courier New,Courier"><font size=-1>!keysym Alt_L = Meta_L</font></font>
<br><font face="Courier New,Courier"><font size=-1>!keysym F12 = Multi_key</font></font>
<p><font face="Courier New,Courier"><font size=-1>clear Shift</font></font>
<br><font face="Courier New,Courier"><font size=-1>!clear Lock</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Control</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod1</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod2</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod3</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod4</font></font>
<br><font face="Courier New,Courier"><font size=-1>clear Mod5</font></font>
<p><font face="Courier New,Courier"><font size=-1>add Shift = Shift_L Shift_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Control = Control_L
Control_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>!add Mod1 = Alt_L Alt_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Mod1 = Meta_L Alt_R</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Mod2 = Num_Lock</font></font>
<br><font face="Courier New,Courier"><font size=-1>add Mod5 = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>!add Mod1 =</font></font>
<br><font face="Courier New,Courier"><font size=-1>!add Mod2 = Alt_R Alt_L
Mode_switch</font></font>
<p><font face="Courier New,Courier"><font size=-1>keycode 0x73 = ISO_Next_Group</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x74 = dead_acute
dead_diaeresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode 0x75 = dead_caron
dead_abovering</font></font>
<p><font face="Courier New,Courier"><font size=-1>_____________cut_here__________________________________________________________</font></font>
<p><font face="Courier New,Courier"><font size=-1># KDE skz.kimap Config
File, modified by Juraj Sipos</font></font>
<br><font face="Courier New,Courier"><font size=-1># name this file as
skz.kimap and copy it to KDE .../kikbd directory</font></font>
<p><font face="Courier New,Courier"><font size=-1>[International Keyboard]</font></font>
<br><font face="Courier New,Courier"><font size=-1>Label=Skz</font></font>
<br><font face="Courier New,Courier"><font size=-1>Locale=sk</font></font>
<p><font face="Courier New,Courier"><font size=-1># *** here was some info
I deleted.</font></font>
<p><font face="Courier New,Courier"><font size=-1>[KeyboardMap]</font></font>
<br><font face="Courier New,Courier"><font size=-1>CapsSymbols=q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym0=1,plus,1,exclam,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym1=2,mu,2,at,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym2=3,onesuperior,3,numbersign,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym3=4,egrave,4,dollar,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym4=5,0x0bb,5,percent,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym5=6,threequarters,6,asciicircum,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym6=7,yacute,7,ampersand,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym7=8,aacute,8,asterisk,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym8=9,iacute,9,parenleft,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym9=0,eacute,0,parenright,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym10=minus,equal,percent,minus,underscore,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym11=grave,dead_diaeresis,dead_circumflex,grave,asciitilde,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym12=equal,dead_acute,dead_caron,equal,plus,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym13=bracketleft,uacute,slash,bracketleft,braceleft,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym14=bracketright,adiaeresis,parenleft,bracketright,braceright,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym15=semicolon,ocircumflex,quotedbl,semicolon,colon,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym21=y,z,Z,,,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keysym22=z,y,Y,,,</font></font>
<br><b><font face="Courier New,Courier"><font size=-1># I changed some
keysyms above (as "mu" instead of "lcaron") and added the following lines</font></font></b>
<br><font face="Courier New,Courier"><font size=-1>keycode43=51,ograve,parenright,backslash,bar,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode40=48,section,exclam,apostrophe,quotedbl,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode51=59,comma,question,less,comma,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode52=60,period,colon,period,greater,</font></font>
<br><font face="Courier New,Courier"><font size=-1>keycode53=61,minus,underscore,slash,question,</font></font>
<br><font face="Courier New,Courier"><font size=-1>____cut_here___________________________________________________________________________</font></font>
<p><font face="Courier New,Courier"><font size=-1>(The numbers of keycodes
are derived from the "xkeycaps" utility)</font></font>
<p><font face="Courier New,Courier"><font size=-1>The purpose of the following
info is to help you build any .Xmodmap keyboard layout with iso8859-2 or
other character sets. If you're going to use other languages than
the Central European ones, find a pertinent table for your ISO*** character
set on Internet. The gdkkeysyms.h file is in (RedHat) /usr/include/gdk/gdkkeysyms.h
and it contains all the special names we're using here (it also contains
names of Greek characters).</font></font>
<p><b><font face="Courier New,Courier"><font size=-1>UNIX</font></font></b>
<p><b><font face="Courier New,Courier"><font size=-1>ISO-8859-2 (ISO Latin2)
character set</font></font></b>
<p><b><font face="Courier New,Courier"><font size=-1>octal hex (you can
use it for other languages too)</font></font></b>
<p><font face="Courier New,Courier"><font size=-1>----------------------------------------------------------------------</font></font>
<br><font face="Courier New,Courier"><font size=-1>First, try to see if
definitions will give you (after installing pertinent fonts and keyboard
in X) what they say they are. If they will not give you what they say they
are (some keycodes will be unfunctional), then you must make a substitution.
Definitions which will not give you what they say they are can be traced
by their visual shape in Western Latin 1 encoding. For example, if you
load a Slovak website, do not use ISO8859-2 character set encoding for
viewing, but Western ISO8859-1 encoding for viewing. Thus you will see
bad fonts with letters like ¾ and so on. You will see what you must
substitute. But if you don't know what "¾" is called in ISO terminology,
find and download an appropriate character set table for ISO-8859-1. It
must be somewhere on the net. The symbols on your right (for example, mu
[micro], which is µ, will give you lcaron instead of µ) will
give you what's on their left. NOTE: vowel *acute signs require no substitution,
therefore I omitted iacute (í), aacute (á), etc. </font></font>
<p><font face="Courier New,Courier"><font size=-1>0243 0xa3 /Lslash £
(Explanation: writing the name of £ ["pound" in our case]</font></font>
<br><font face="Courier New,Courier"><font size=-1>
to Xmodmap or kimap file will give you Lslash. But Lslash can be</font></font>
<br><font face="Courier New,Courier"><font size=-1>
obtained by a dead_caron - you press a dead_caron and L). The sign</font></font>
<br><font face="Courier New,Courier"><font size=-1>
on the right, if put in Xmodmap or kimap files, will</font></font>
<br><font face="Courier New,Courier"><font size=-1>
print you the character which is on its left</font></font>
<br><font face="Courier New,Courier"><font size=-1>0245 0xa5 /Lcaron ¥
Thus, writing "yen" to kimap or Xmodmap file will give us Lcaron</font></font>
<br><font face="Courier New,Courier"><font size=-1>0251 0xa9 /Scaron ©
copyright (will give us Scaron)</font></font>
<br><font face="Courier New,Courier"><font size=-1>0253 0xab /Tcaron «
guillemotleft (will give us Tcaron)</font></font>
<br><font face="Courier New,Courier"><font size=-1>0256 0xae /Zcaron ®
registered</font></font>
<br><font face="Courier New,Courier"><font size=-1>0265 0xb5 /lcaron µ
mu</font></font>
<br><font face="Courier New,Courier"><font size=-1>0271 0xb9 /scaron ¹
onesuperior</font></font>
<br><font face="Courier New,Courier"><font size=-1>0273 0xbb /tcaron »
guillemotright</font></font>
<br><font face="Courier New,Courier"><font size=-1>0276 0xbe /zcaron ¾
threequarters</font></font>
<br><font face="Courier New,Courier"><font size=-1>0306 0xc6 /Cacute Æ
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0312 0xca /Eogonek Ê
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0313 0xcb /Edieresis
Ë Edieresis</font></font>
<br><font face="Courier New,Courier"><font size=-1>0314 0xcc /Ecaron Ì
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0317 0xcf /Dcaron Ï
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0321 0xd1 /Nacute Ñ
Ograve</font></font>
<br><font face="Courier New,Courier"><font size=-1>0322 0xd2 /Ncaron Ò
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0324 0xd4 /Ocircumflex
Ô Ocircumflex</font></font>
<br><font face="Courier New,Courier"><font size=-1>0325 0xd5 /Ohungarumlaut
Õ find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0330 0xd8 /Rcaron Ø
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0331 0xd9 /Uring Ù
find out yourself</font></font>
<br><font face="Courier New,Courier"><font size=-1>0333 0xdb /Uhungarumlaut
Û</font></font>
<br><font face="Courier New,Courier"><font size=-1>0336 0xde /Tcedilla
Þ</font></font>
<br><font face="Courier New,Courier"><font size=-1>0343 0xe3 /abreve ã</font></font>
<br><font face="Courier New,Courier"><font size=-1>0345 0xe5 /lacute å</font></font>
<br><font face="Courier New,Courier"><font size=-1>0346 0xe6 /cacute æ</font></font>
<br><font face="Courier New,Courier"><font size=-1>0350 0xe8 /ccaron è
egrave</font></font>
<br><font face="Courier New,Courier"><font size=-1>0352 0xea /eogonek ê</font></font>
<br><font face="Courier New,Courier"><font size=-1>0354 0xec /ecaron ì</font></font>
<br><font face="Courier New,Courier"><font size=-1>0357 0xef /dcaron ï</font></font>
<br><font face="Courier New,Courier"><font size=-1>0361 0xf1 /nacute ñ
ntilde</font></font>
<br><font face="Courier New,Courier"><font size=-1>0362 0xf2 /ncaron ò</font></font>
<br><font face="Courier New,Courier"><font size=-1>0365 0xf5 /ohungarumlaut
õ</font></font>
<br><font face="Courier New,Courier"><font size=-1>0370 0xf8 /rcaron ø</font></font>
<br><font face="Courier New,Courier"><font size=-1>0371 0xf9 /uring ù</font></font>
<br><font face="Courier New,Courier"><font size=-1>0373 0xfb /uhungarumlaut
û</font></font>
<br><font face="Courier New,Courier"><font size=-1>0376 0xfe /tcedilla
þ</font></font>
<br><font face="Courier New,Courier"><font size=-1>0377 0xff /dotaccent
ÿ</font></font>
<p><font face="Courier New,Courier"><font size=-1>You may experiment to
find out which definitions will give you which characters, it shouldn't
be difficult. This is just a hint on how to start. I didn't go on to investigate
further definitions because I have my Slovak and Czech keyboards and I'm
not, for now, interested to use other keyboards. Look at my homage
and build your own keyboard.</font></font>
<br>
<p><font face="Courier New,Courier"><font size=-1>Enjoy.</font></font>
<br><font face="Courier New,Courier"><font size=-1>Juraj Sips</font></font>
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Juraj Sipos<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<!--startcut ==========================================================-->
<!-- P --> <HR> <!-- P -->
<!-- A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/sipos.html">
<FONT SIZE="+2"><EM>Talkback:</EM> Discuss this article with peers</FONT></A -->
<P>
<!-- *** BEGIN navbar *** -->
<A HREF="okopnik.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<IMG ALT=""
SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom" >
<A HREF="index.html"><IMG ALT="[ Table of Contents ]"
SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<A HREF="../index.html"><IMG ALT="[ Front Page ]"
SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="../faq/index.html"><IMG ALT="[ FAQ ]"
SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/sipos.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<IMG ALT=""
SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom" >
<A HREF="stagner.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<!-- *** END navbar *** -->
</BODY></HTML>
<!--endcut ============================================================-->
<!--startcut ==============================================-->
<!-- *** BEGIN HTML header *** -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><HEAD>
<title>Connecting to Your Home Computer LG #53</title>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
ALINK="#FF0000">
<!-- *** END HTML header *** -->
<A HREF="http://www.linuxgazette.com/">
<H1><IMG ALT="LINUX GAZETTE" SRC="../gx/lglogo.jpg"
WIDTH="600" HEIGHT="124" border="0"></H1></A>
<!-- *** BEGIN navbar *** -->
<A HREF="sipos.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<IMG ALT=""
SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom" >
<A HREF="index.html"><IMG ALT="[ Table of Contents ]"
SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<A HREF="../index.html"><IMG ALT="[ Front Page ]"
SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="../faq/index.html"><IMG ALT="[ FAQ ]"
SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A>
<A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<IMG ALT=""
SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom" >
<A HREF="ward.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A>
<!-- *** END navbar *** -->
<P>
<!-- A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue53/stagner.html">
<FONT SIZE="+2"><EM>Talkback:</EM> Discuss this article with peers</FONT></A -->
<!--endcut ============================================================-->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Connecting to Your Home Computer</font></H1>
<H4>By <a href="mailto:restagner@netscape.net">Robert Stagner</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
A couple of weeks back, I was at work typing away on my NT box (please,
no flames on this, I have no other choice : -), when I suddenly realized that
a Perl script that I had been updating on my home machine (a Linux box running
Red Hat 6.0), needed to be transferred to my computer at work. Since I do not
have a 24/7 connection to the Internet for my Linux box, I was out of luck. I
could not just FTP to my home machine and download the script. Or could I?
<P>
I suppose I could set up a DSL or cable modem connection, but I personally
find that a 56K PPP connection is a lot less financially burdensome -- at least
for the time being. Anyhow, I thought about how I might somehow get the Linux
box on the Internet while unattended (i.e. just after I left for work each
morning). My solution, although involving several scripts and a cronjob, can
be set up for a PPP connection rather quickly. Once tested and configured
properly, the end result will provide you with a means of automatically
connecting to the Internet and then sending an e-mail off to your work address
containing the dynamically generated IP Address assigned to your home computer
by your ISP. The only assumptions to get this up and running are the following:
<UL>
<LI>you have root permissions (usually the case, if your running this from home).
<LI>you have copies of <A HREF="misc/stagner/ppp-on.txt">ppp-on</A>, <A HREF="misc/stagner/ppp-off.txt">ppp-off</A>, and <A HREF="misc/stagner/ppp-on-dialer.txt">ppp-on-dialer</A> shell scripts. These can
usually be found in the /usr/doc/ppp-2.3.7/scripts/ directory.
<LI>you have successfully connected and disconnected to the Internet using the
ppp-on and ppp-off scripts.
<LI>your ISP has provided you with access to a local telephone number (I suppose
this is not really required, but who wants to pay phone charges).
</UL>
<P>Other than these assumptions, configuring your system to automatically dial-up
your ISP are pretty straight forward. The first step to get this up and running is to copy over (as root) the ppp-on and ppp-off shell scripts to the
/usr/sbin/ directory. Make sure the permissions are set to 0755 for each file.
Then, copy over ppp-on-dialer to the /etc/ppp/ directory. The "dialer" script
is the second part of a two tier step in establishing a connection to your
ISP. The first, is the ppp-on script.
<P>Next, edit the ppp-on script by assigning the appropriate telephone number,
account and password information. Also, remember to assign the appropriate
device and speed of your modem. Mine read /dev/ttyS3 and 115200. It should
resemble the following once your done:
<BR>
<BR>
<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
#!/bin/sh
#
# These are the parameters. Change as needed.
TELEPHONE=<FONT COLOR="red"><B>your phonenum </B></FONT># The telephone number for the connection
ACCOUNT=<FONT COLOR="red"><B>your account </B></FONT> # The account name for logon (as in 'George Burns')
PASSWORD=<FONT COLOR="red"><B>your password </B></FONT> # The password for this account (and 'Gracie Allen')
LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0
REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0
NETMASK=255.255.255.0 # The proper netmask if needed
# Export them so that they will be available at 'ppp-on-dialer' time.
export TELEPHONE ACCOUNT PASSWORD
#
# This is the location of the script which dials the phone and logs
# in. Please use the absolute file name as the $PATH variable is not
# used on the connect option. (To do so on a 'root' account would be
# a security hole so don't ask.)
#
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
#
# Initiate the connection
exec /usr/sbin/pppd debug lock modem crtscts <FONT COLOR="red"><B>/dev/ttyS3 115200</B></FONT> \
asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \
noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
</CODE>
</PRE>
</TD>
</TR>
<TR>
<TD BGCOLOR="#FFFFFF">
<FONT COLOR="red"><B>Red Text</B></FONT> - code that needs to be altered to meet your needs.
</TD>
</TR>
</TABLE>
</CENTER>
<P>Now that you have all the shell scripts in the appropriate places, it's time
to look at a little Perl script I wrote that calls the connection or disconnection process, as well as send off an e-mail with the IP Address of my
Linux box to my NT box at work. Place a copy (as root) of this
<a href="misc/stagner/sendMeIP.pl.txt">script</a> in your /usr/local/bin directory with a
permissions setting of 0755. The purpose of this script is to:
<UL>
<LI>Provide a connection/disconnection to the Internet via a
shell program (/usr/sbin/ppp-on, or ppp-off).
<LI>Capture the dynamically generated IP address from the ISP service.
<LI>Send the returned IP Address to a predefined e-mail address so that
a remote connection can be made to your home computer.
</UL>
<P>The Perl script begins with the following lines:
<BR>
<BR>
<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
# Counter used to provide a delay while the ppp connection is established
$COUNT = 1;
# Check for the existence of options
if (!$ARGV[0] || $ARGV[0] !~ m/(connect|disconnect)/i) {
print "Usage: sendMeIP.pl <connect | disconnect>\n";
exit -1;
}
# Call and execute connection/disconnection to the Internet
&pppConnection($ARGV[0]);
# Caputre the dynamically created remote IP Address
$assignedIPAddress = &captureIPAddress;
# Send the IP Address via e-mail
&sendMail($assignedIPAddress);
</CODE>
</PRE>
</TD>
</TR>
</TABLE>
</CENTER>
<BR>
<BR>
<P>Essentially, all this does is first set a counter, then check to see if the
necessary arguments have been passed to the program. If so, establish a
connection (or, disconnection -- &pppConnection) to the Internet. Capture
the IP Address (&captureIPAddress) by searching the output of a call to
/sbin/ifconfig and finally send off the e-mail (&sendMail). The call to execute
ifconfig actually happens in the &captureIPAddress subroutine. Let us have a
look at this code:
<BR>
<BR>
<CENTER>
<TABLE BORDER=0 CELLASPACING=0 CELLPADDING=4 WIDTH="80%">
<TR>
<TD BGCOLOR="FFFFCC">
<PRE>
<CODE>
sub captureIPAddress {
my $captureIFCONFIG;
$captureIFCONFIG = qx#/sbin/ifconfig#;
if ($captureIFCONFIG =~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/) {
my $assignedIPAddress = "$1";
print "IP Address capture successful: $assignedIPAddress.\n";
return ($assignedIPAddress);
}
elsif (($captureIFCONFIG !~ /inet addr:(\d+\.\d+.\d+\.\d+)\s*P-t-P.*/)
&& ($COUNT < 60)) {
$COUNT++;
sleep 1;
&captureIPAddress;
}
else {
print "Houston, we have a problem in capturing the IP Address.\n";
exit -2;
}
}
... [code removed for clarity]
sub sendMail {
my $assignedIPAddress = shift;
my $mailService = <FONT COLOR="red"><B>location of your mail program: mine is "/usr/sbin/sendmail"</B></FONT>;
my $from = <FONT COLOR="red"><B>"Your Name <yourLocalEmail\@host.com>"</B></FONT>;
my $to = <FONT COLOR="red"><B>"Your Name <yourWorkEmail\@host.com>"</B></FONT>;
die "Trouble sending mail: $!" unless (-e $mailService);
open(SENDMAIL, "|$mailService -oi -t") or die "Trouble sending mail:
$!";
print SENDMAIL <<"EOMAIL";
From: $from
To: $to
Subject: An Important Message About <FONT COLOR="red"><B>your.computer</B></FONT>
Use the following IP Address to establish a connection with <FONT COLOR="red">
<B>your.computer</B></FONT> : $assignedIPAddress
EOMAIL
close(SENDMAIL);
print "The e-mail message has been sent.\n";
}
</CODE>
</PRE>
</TD>
</TR>
<TR>
<TD BGCOLOR="#FFFFFF">
<FONT COLOR="red"><B>Red Text</B></FONT> - code that needs to be altered to meet your needs.
</TD>
</TR>
</TABLE>
</CENTER>
<BR>
<BR>
<P>First, the /sbin/ifconfig command is executed using Perl's equivalence of a
backtick (qx function). The output of this command is captured in the
$captureIFCONFIG variable. We then attempt to look for a pattern that
contains "inet addr:" followed by an IP Address and then followed by "P-t-P".
Since it's the address we're concerned with, we store this in
$assignedIPAddress. However, if we have not matched the IP Address and the
count is less than 60, then we add one to the count variable and put the
program to sleep for one second. At this point, we call the same subroutine
again and again until we have a pattern match or we've exceeded the count.
This gives the /sbin/ifconfig command a chance to write out the appropriate
interface information for a PPP connection. Actually, we give the program about
60 seconds to find the IP Address. If we can't find an IP Address, we print out
an error message and exit the program.
<P>Finally, you'll need to configure the Perl script to point to your email
program, as well as set up the "From" and "To" e-mail addresses contained in
the &sendMail subroutine. Simply reassign the $mailService, $from, and $to
variables to match your case.
<P>Now we've come to the final step -- setting up your system to automatically
execute the Perl script. We will accomplish this through the use of the
crontab command. As root, execute the crontab command with the -e option. The
-e option puts you in the edit mode. From here add the following two lines
and save the file:
<BR>
<BR>
<PRE>
<CODE>
00 8 * * 1,2,3,4,5 perl /usr/local/bin/sendMeIP.pl connect
15 12 * * 1,2,3,4,5 perl /usr/local/bin/sendMeIP.pl disconnect
</CODE>
</PRE>
<P>The first of these two lines calls the Perl script at 8:00am, Monday thru
Friday. The second line calls the Perl script to disconnect from the
Internet at 12:15pm, Monday thru Friday. You can check your work in crontab by
executing the crontab command again, but this time passing it the -l option.
For further information on crontab, check out the man pages.
<P>Once you have received the e-mail message at work, you should now be able to connect to your machine via telnet and ftp by using the given IP Address.
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Robert Stagner<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">Some issues on floating-point precision under Linux</font></H1>
<H4>By <a href="mailto:award@mypic.ad">Alan Ward</a></H4>
</center>
<P> <HR> <P>
<!-- END header -->
<p><b>Abstract</b></p>
<p>In this article I propose a practical exploration of how Linux behaves when performing
single or double-precision calculations. I use a chaotic function to show how the calculation
results of a same program can vary quite a lot under Linux or a Microsoft operating system.</p>
<p>It is intended for math and physics students and teachers, though the equations
involved are quite accessible to just about everybody.</p>
<p>I use Pascal, C and Java as they are the main programming languages in use today.</p>
<p>This discussion focusses on the Intel architecture. Basic concepts are the same for other
types of processor, though the details can vary somewhat.</p>
<p><b>May functions</b></p>
<p>These functions build up a series of terms with the form: </p>
<p align=center>x<sub>0</sub> is given in [0;1]<br>
x<sub>k+1</sub> = mu.x<sub>k</sub>.(1 - x<sub>k</sub>) where mu is a parameter</p>
<p>They were introduced by Robert May in 1976, to study the evolution of a closed insect
population. It can be shown that:</p>
<p><ul>
<li>for 0 <= mu < 3, the behaviour of the series is <u>deterministic</u></li>
<li>for 3 <= mu <= 4, behaviour is <u>chaotic</u></li>
</ul></p>
<p>Simplifying things somewhat, the difference between a chaotic and a deterministic system is
their sensibility to initial conditions. A chaotic system is very sensible: a small
variation of the initial value of x<sub>0</sub> will lead to increasing differences
in subsequent terms. Thus any error that creeps into the calculations -- such as
lack of precision -- will eventually give very different final results.</p>
<p>Other examples of chaotic systems are satellite orbitals and weather prediction.</p>
<p>On the other hand, a deterministic system is not so sensible. A small error in
x<sub>0</sub> will make us calculate terms that, while differing from their exact
value, will be "close enough" aproximations (whatever that means).</p>
<p>An example of a deterministic system is the trajectory of a ping-pong ball.</p>
<p>So chaotic functions are useful to test the precision of calculations on different
systems and with various compilers.</p>
<p><b>Our example</b></p>
<p>In this example, I propose to use the following values:</p>
<p align=center>mu = 3.8<br>
x<sub>0</sub> = 0.5</p>
<p>A precise calculation with a special 1000-digit precision packet gives the following
results:</p>
<pre>
k x(k)
----- ---------
10 0.18509
20 0.23963
30 0.90200
40 0.82492
50 0.53713
60 0.66878
70 0.53202
80 0.93275
90 0.79885
100 0.23161
</pre>
<p>As you see, the series fluctuates merrily up and down the scale between 0 and 1.</p>
<p><b>Programming in Turbo-Pascal</b></p>
<p>A program to calculate this function is easily written in Turbo Pascal for MS-DOS:
(<A HREF="misc/ward/caos.pas.txt">text version</A>)
<pre>
program caos;
{$n+} { you need to activate hardware floating-point calculation
in order to use the extended type }
uses
crt;
var
s : single; { 32-bit real }
r : real; { 48-bit real }
d : double; { 64-bit real }
e : extended; { 80-bit real }
i : integer;
begin
clrscr;
s := 0.5;
r := 0.5;
d := 0.5;
e := 0.5;
for i := 1 to 100 do begin
s := 3.8 * s * (1 - s);
r := 3.8 * r * (1 - r);
d := 3.8 * d * (1 - d);
e := 3.8 * e * (1 - e);
if (i/10 = int(i/10)) then begin
writeln (i:10, s:16:5, r:16:5, d:16:5, e:16:5);
end;
end;
readln;
end.
</pre>
<p>As you can see, Turbo Pascal has quite a number of floating-point types, each on
a different number of bits. In each case, specific bits are set aside for: </p>
<p><ul>
<li>the sign: one bit indicates a positive or negative number</li>
<li>the magnitude (or mantissa): the number itself coded as binary</li>
<li>the exponent: the power of 2 to multiply the magnitude by to obtain
the real value of the number. Note that it may be negative.</li>
</ul></p>
<p>For example, on a 386, an 80-bit floating-point is coded as:</p>
<p><ul>
<li>bits 0 to 55: magnitude</li>
<li>bits 56 to 78: exponent</li>
<li>bit 79: sign</li>
</ul></p>
<p>Naturally, hardware FP coding is determined by the processor manufacturer. However,
the compiler designer can specify different codings for internal calculations. If
FP-math emulation is not used, the compiler must then provide means to translate
compiler codings to hardware. This is the case for Turbo Pascal.</p>
<p>The results of the above program are:</p>
<pre>
k single real double extended
---- --------- --------- --------- ----------
10 0.18510 0.18510 0.18510 0.18510
20 0.23951 0.23963 0.23963 0.23963
30 0.88423 0.90200 0.90200 0.90200
40 0.23013 0.82492 0.82493 0.82493
50 0.76654 0.53751 0.53714 0.53714
60 0.42039 0.64771 0.66878 0.66879
70 0.93075 0.57290 0.53190 0.53203
80 0.28754 0.72695 0.93557 0.93275
90 0.82584 0.39954 0.69203 0.79884
100 0.38775 0.48231 0.41983 0.23138
</pre>
<p>The first terms are rather close in all cases, as heavy calculation
precision losses (from truncation) have not yet occurred. Then the least precise
(single) format already loses touch with reality around x<sub>30</sub>, while
the real format goes out around x<sub>60</sub> and the double around
x<sub>90</sub>. These are all compiler FP codings.</p>
<p>The extended format -- which is the native hardware FP coding -- retains
sufficient precision right up to x<sub>100</sub>. As an educated guess, it
would probably go out around x<sub>110</sub>.</p>
<p><b>p2c under Linux</b></p>
<p>The above program can be compiled with almost no changes with the p2c translating
program under Linux:</p>
<p><table align=center width=450>
<tr><td>p2c caos.pas</td><td><i>translate caos.pas to caos.c</i></td></tr>
<tr><td>cc caos.c -lp2c -o caos</td><td><i>compile caos.c + p2c library using gcc</i></td></tr>
</table></p>
<p>Results are then:</p>
<pre>
k single real double extended
---- --------- --------- --------- ----------
10 0.18510 0.18510 0.18510 0.18510
20 0.23951 0.23963 0.23963 0.23963
30 0.88423 0.90200 0.90200 0.90200
40 0.23013 0.82493 0.82493 0.82493
50 0.76654 0.53714 0.53714 0.53714
60 0.42039 0.66878 0.66878 0.66878
70 0.93075 0.53190 0.53190 0.53190
80 0.28754 0.93558 0.93558 0.93558
90 0.82584 0.69174 0.69174 0.69174
100 0.38775 0.49565 0.49565 0.49565
</pre>
<p>It is interesting to note that the p2c translator converts Pascal single
precision FP to C single, while the real, double and extended types
all convert to C double. This is a format that keeps precision up to
around x<sub>80</sub>.</p>
<p>I have no data to substantiate the following, but my impression is that
C double FP coding is also on 64 bits, but with a different magnitude vs.
exponent distribution than for Turbo Pascal.</p>
<p><b>gcc under Linux</b></p>
<p>The above program, rewritten in C and compiled with gcc, naturally gives the very same
results as with p2c:
(<A HREF="misc/ward/caos.c.txt">text version</A>)
<pre>
#include <stdio.h>
int main() {
float f;
double d;
int i;
f = 0.5;
d = 0.5;
for (i = 1; i <= 100; i++) {
f = 3.8 * f * (1 - f);
d = 3.8 * d * (1 - d);
if (i % 10 == 0)
printf ("%10d %20.5f %20.5f\n", i, f, d);
}
}
</pre>
<p><b>Java</b></p>
<p>The Java programming language is another case altogether, as
from the start it was designed to work on many different platforms.</p>
<p>A Java .class file contains the source program compiled in a Virtual Machine
Language format. This "executable" file is then interpreted on a client
box by whatever java interpreter is available.</p>
<p>However, the Java specification took FP precision very much into account. Any
java interpreter <strong>should</strong> perform single and double precision FP
calculations with precisely the same results.
<p>This means that one same program will:</p>
<p><ul>
<li>be executed with the same precision on different architectures (e.g. Intel, Motorola, Alpha, ...)</li>
<li>be executed with the same precision on a same architecture, even though the java language interpreter
is different.</li>
</ul></p>
<p>The reader can easily experiment these facts. The following applet calculates
the May series we have been talking about. Compare its results on your own setup, viewed
with Netscape, HotJava, appletviewer, etc. You could also compare with the same
browsers, or others, under Windoze. Just open this page with each browser:</p>
<BLOCKQUOTE> <EM>
[The applet has been removed from the TWDT version to prevent possible
problems with browsers that don't do Java properly.
To view the standalone article with the applet, click
<A HREF="ward.html">here</A>. -Ed.]
</EM> </BLOCKQUOTE>
<p>I have, so far, only found one single exception to this rule. Guess who?
Microsoft Explorer 3.0!</p>
<p>Finally, the java source file was:
(<A HREF="misc/ward/caos.java.txt">text version</A>)
<pre>
import java.applet.Applet;
import java.lang.String;
import java.awt.*;
public class caos extends Applet {
public void paint (Graphics g) {
float f;
double d;
String s;
int i, y;
f = (float)0.5;
d = 0.5;
g.setColor (Color.black);
g.drawString ("k", 10, 10);
g.drawString ("float", 50, 10);
g.drawString ("double", 150, 10);
g.setColor (Color.red);
y = 20;
for (i = 1; i <= 100; i++) {
f = (float)3.8* f * ((float)1.0 - f);
d = 3.8 * d * (1.0 - d);
if (i % 10 == 0) {
y += 12;
g.drawString (java.lang.String.valueOf(i), 10, y);
g.drawString (java.lang.String.valueOf(f), 50, y);
g.drawString (java.lang.String.valueOf(d), 150, y);
}
}
}
}
</pre>
<hr>
<p><b>Further reading</b></p>
<p><i>An introduction to Chaotic Dynamical Systems</i>,
R.L. Devaney</p>
<p><i>Jurassic Park I and II</i>, Michael Crichton (the books, not the films!)</p>
<p><i>The Intel 386-SX microprocessor data sheet</i>, Intel Corp. (available at http://developer.intel.com)</p>
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright © 2000, Alan Ward<BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
<center><H2>
<A HREF="http://www.linuxgazette.com/">
<IMG SRC="../gx/newlogo.jpg" width=600 height=256 border=0
ALT="Linux Gazette... making Linux just a little more fun!"></a>
</H2>
<H4>Published by <A HREF="http://www.linuxjournal.com/"><I>Linux Journal</I></A></H4>
</center>
<P> <hr> <P>
<H1><font color="maroon">The Back Page</font></H1>
<ul>
<li><a HREF="#authors">About This Month's Authors</a>
<li><a HREF="#notlinux">Not Linux</a>
</ul>
<a name="authors"></a>
<P> <HR> <P>
<!--======================================================================-->
<center><H3><font color="maroon">About This Month's Authors</font></H3></center>
<P> <HR> <P>
<!--======================================================================-->
<!-- BEGIN bio -->
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Paulo Henrique Baptista de Oliveira</H4>
I am 23 years old. I have been using computers since age 15, from MSX Hotbit
to Linux GNU/Debian 2.2. I currently work at Linux Solutions at Brazil. We
mantain a site OLinux
(<A HREF="http://www.olinux.com.br">www.olinux.com.br</A>) with a Introduction,
Programming, Programs, Games, Security and Interviews sections and news about
Linux everyday of the week. We have gotten a lot of positive feedback from
Brazilian Linux users. We have already published more than 100 articles and 500
news items in about 4 months.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Konstantin Boldyshev</H4>
Konstantin Boldyshev is software engineer, his primary work areas are
assembly and C system programming, networking & and internet, embedded
systems. Mostly known to community as Assembly HOWTO maintainer,
asmutils author, and linux assembly hacker.
He is maintainer of the <A HREF="http://linuxassembly.org">"Linux Assembly"</A>,
Linux/UNIX assembly programing portal.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Shane Collinge</H4>
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.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Fernando Correa</H4>
Fernando is a computer analyst just about to finish his
graduation at Federal University of Rio de Janeiro. Now, he has built
with his staff the best
<A HREF="http://www.olinux.com.br">Linux portal</A> in Brazil and have further
plans to improve services and content for their Internet users.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Pat Eyler</H4>
"Pate" is a linux/unix/networking geek who enjoys playing on the
command line. When he's not puttering with or writing about computers
and networks he likes to play with his kids, cook, and read. Talk to
him at <a href=mailto:pate@gnu.org>pate@gnu.org</a>.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Sean Lamb</H4>
I'm currently working on completing my BS degree in Computer Science at Lakeland
College (begun earlier at the University of California, Riverside). I've been
involved in computer support for the past 6 years, via phone, fax, and email,
and I have created documentation for use by end users (some articles in the
Microsoft Knowledge Base) and other support staff (published in-house as either
individual documents or on the support intranet), and I contributed some
chapters to "Special Edition Using KDE" from Que publishing (now in print). I
have done some application development on MS-DOS platforms and have begun
developing a pair of applications for my Linux box. I am currently employed as
a software developer working in C++ with Informix on a mix of Linux and AIX
servers. When I'm not playing with or writing about Linux, I can usually be
found working on my model railroad.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Ben Okopnik</H4>
A cyberjack-of-all-trades, Ben wanders the world in his 38' sailboat, building
networks and hacking on hardware and software whenever he runs out of cruising
money. He's been playing and working with computers since the Elder Days
(anybody remember the Elf II?), and isn't about to stop any time soon.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Juraj Sipos</H4>
I live and work in Bratislava, Slovakia as a library
information worker, translator and research reader at the Institute for
Child Psychology. I published some of my poetry here and in USA, I
translated some books from English (e.g., Zen Flesh, Zen Bones by Paul
Reps). You can see some of my stories and poetry at
<A HREF="http://www.crosswinds.net/~aproximetri/index.htm">
http://www.crosswinds.net/~aproximetri/index.htm</A>.
Computers are my hobby.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Robert Stagner</H4>
Robert has been programming in Perl on the Win32 and Mac
platforms for the past three years. He's been using Linux for the last year,
and simply loves it. When he is not programming in Perl or creating shell
scripts, he spends time with his lovely wife.
<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Alan Ward</H4>
Alan teaches CS in Andorra at highschool and university levels. He's
back to Unix this year after an 8-year forced interlude since he
graduated -- it makes networking so much easier. His hobbies include
science photography (both digital and traditional), trekking, rock and
processor collecting.
<!-- END bio -->
<a name="notlinux"></a>
<P> <hr> <P>
<!--====================================================================-->
<center><H3><font color="maroon">Not Linux</font></H3></center>
<P> <HR> <P>
<!--======================================================================-->
<P>
<!-- *** BEGIN Not Linux *** --->
<P> Last month I said <EM>Linux Gazette</EM> would have a new Editor.
The announcement turned out to be premature, so I am remaining the Editor
for the time being.
<P> Thanks to SOFCOM for offering the <EM>Gazette's</EM> first
<A HREF="http://www.sfcom.com/"><STRONG>Japanese translation</STRONG></A>.
You've been added to the <A HREF="../mirrors.html">mirrors page</A>.
I'll have to take our readers' word for it that the site is displaying
correctly, since my browser doesn't do Japanese characters.
<P> This issue features four articles from the OLinux site in Brazil (<A
HREF="http://www.olinux.com.br">http://www.olinux.com.br</A> -- Portuguese).
Fernando Correa and Paulo Baptista have been very cooperative with
<EM>LG</EM>, translating their interviews with Linux personalities for us
and the like. We at <EM>Linux Gazette</EM> like to see the growth of Linux in
non-English- speaking countries, and we're happy for the work OLinux is doing
with their Brazilian portal. Latin America has experienced tremendous growth
in Linux use over the past year, as Mexican schools have adopted it as a
low-cost alternative to Windows, and Conectiva has released native Spanish and
Portuguese Linux distributions. We'd like to cover more such endeavors in
other parts of the world, if readers would be willing to send in reports from
their country or translate some of their articles into English for us.
<P> This issue marks the debut of a new <EM>Linux Gazette</EM> logo and
navigation buttons. As you know, some readers have said it's time for
something new, so we're giving it to them. The blue-silver chrome color was
chosen for its "industrial" look, to represent that <EM>Linux Gazette</EM> is
about putting Linux to work, getting it to do what you need. Of course, it's
still about making Linux just a little more fun, too!
<P> After all, if your work is chosen carefully, so that it furthers your
personal goals (whatever they are), then the work will be fun. For instance, I
enjoy Python and Zope, so I'm happy that my work gives me the chance to learn
stuff I'd want to learn anyway.
<P> Michael 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>
This page written and maintained by the Editor of the <I>Linux Gazette</I>.<BR>
Copyright © 2000, <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</A><BR>
Published in Issue 53 of <i>Linux Gazette</i>, May 2000</H5>
<!-- *** END copyright *** -->
</BODY></HTML>
|