File: issue24.html

package info (click to toggle)
lg-issue24 4-6
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,720 kB
  • ctags: 130
  • sloc: sh: 48; makefile: 37
file content (7131 lines) | stat: -rw-r--r-- 302,259 bytes parent folder | download | duplicates (2)
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
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> Linux Gazette Index Page </TITLE>
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#A000A0"
ALINK="#FF0000" >
<center><H2><IMG SRC="../gx/newlogo.jpg" 
ALT="Linux Gazette... making Linux just a little more fun!">
</H2>

<H5>Copyright &copy; 1996-98 Specialized Systems Consultants, Inc.</H5>
</center>

<P> <HR> <P> 
<!--==================================================================-->
<center>
<H1>Welcome to Linux Gazette!<img src="../gx/tm.gif" alt="(tm)"></H1>
</center>
<P> <HR> <P> 
<!--==================================================================-->
<H1>Published by:</H1>
<center>
<H1><A HREF="http://www.ssc.com/lj/">
        <img src="../gx/ljlogo.gif" alt="Linux Journal"></A></H1>
</center>
<P><HR> <P>
<H1>Sponsored by:</H1>
<table>
<tr>
<td><H1><A HREF="http://www.infomagic.com/"><img ALIGN="bottom" HSPACE="70"
src=../gx/infologo.gif alt="InfoMagic"></A></H1></td>
<td>
<H1><A HREF="http://www.suse.com/"><img ALIGN="bottom" src=../gx/suse.gif alt="S.u.S.E."></A></H1></td>
<td>
<H1><A HREF="http://www.redhat.com/"><img HSPACE="70" src=../gx/redhat.gif alt="Red Hat"></A></H1></td>
</tr>
</table>

<P> 
Our sponsors make financial contributions toward the costs of
publishing <I>Linux Gazette</I>. If you would like to become a sponsor
of <I>LG</I>, e-mail us at <A
HREF="mailto:sponsor@ssc.com">sponsor@ssc.com</A>.

<P> 
<I>Linux Gazette</I> is a non-commercial, freely available publication and will
remain that way. Show your support by using the products of our sponsors
and publisher. To subscribe to <I>Linux Journal</I>, click
<A HREF="http://www.linuxjournal.com/subform.html">here</A>.

<P> <HR> <P>
<!--=================================================================-->
<H1 align="center">Table of Contents <BR>January 1998 Issue #24</H1>

<P> <HR> <P>
<table><tr>
<td rowspan=4>
<UL>
<LI><A HREF="../lg_frontpage.html">The Front Page</A> 
<LI><A HREF="./lg_mail24.html">The MailBag</A> 
<ul>
<li><a HREF="./lg_mail24.html#help">Help Wanted</a>
<li><a HREF="./lg_mail24.html#gen">General Mail</a>
</ul>
<LI><A HREF="./lg_tips24.html">More 2 Cent Tips</A>
<ul>
<li><a HREF="./lg_tips24.html#ps/vc">Followup to PostScript and VC Key
Sequences (LG#23)</a>
<li><a HREF="./lg_tips24.html#ps/fu">PostScript $0.02 follow-up</a>
<li><a HREF="./lg_tips24.html#cheap">Yet another cheap tip</a>
<li><a HREF="./lg_tips24.html#dose">2 cent tip - dosemu</a>
<li><a HREF="./lg_tips24.html#find1">Re: 2c Tip "Finding What You Want
with find"</a>
<li><a HREF="./lg_tips24.html#find2">Re: Finding What You Want with find</a>
<li><a HREF="./lg_tips24.html#find3">Finding What You Want with find Part
III</a>
<li><a HREF="./lg_tips24.html#find4">More on finding</a>
<li><a HREF="./lg_tips24.html#find5">Another way to find</a>
<li><a HREF="./lg_tips24.html#find6">Yet another way to find</a>
<li><a HREF="./lg_tips24.html#find7">A final(?) way to find</a>
<li><a HREF="./lg_tips24.html#mozilla">Re: I need some help</a>
<li><a HREF="./lg_tips24.html#spin">Spinning Down Unused HDs</a>
<li><a HREF="./lg_tips24.html#egg1">LG Tips and Tricks (Netscape)</a>
<li><a HREF="./lg_tips24.html#egg2">Easter Eggs in Netscape</a>
<li><a HREF="./lg_tips24.html#calc">Calculator Tip</a>
<li><a HREF="./lg_tips24.html#nohack">Security script</a>
<li><a HREF="./lg_tips24.html#cron">Controlling cron.hourly</a>
<li><a HREF="./lg_tips24.html#ping">Syslog and ping</a>
</ul>
<LI><A HREF="./lg_bytes24.html">News Bytes</A>  
<ul>
<li><a HREF="./lg_bytes24.html#general">News in General</a>
<li><a HREF="./lg_bytes24.html#software">Software Announcements</a>
</ul>
<LI><A HREF="./lg_answer24.html">The Answer Guy</A>, by James T. Dennis
<ul>
<li><a HREF="./lg_answer24.html#net1">Netscape Mail Crashing</a>
<li><a HREF="./lg_answer24.html#slack">Slackware Help</a>
<li><a HREF="./lg_answer24.html#net2">Netscape /var/spool/USER </a>
<li><a HREF="./lg_answer24.html#virtual">Getting Rid of Virtual Screens</a>
<li><a HREF="./lg_answer24.html#diald">diald's niche</a>
<li><a HREF="./lg_answer24.html#redh1">Upgrade to Red Hat 5.0?</a>
<li><a HREF="./lg_answer24.html#redh2">Red Hat Linux and WABI and other things</a>
<li><a HREF="./lg_answer24.html#pdt">Linux as a PDT</a>
</ul>
<LI><A HREF="./nielsen.html">Quick autofs Tutorial</a>, by Mark Nielsen
<LI><A HREF="./jaeggli.html">Buying A Laptop</a>, by Joel Jaeggli
<LI><A HREF="./bavendiek.html">Copying Files Using Mirror</a>, by Gerd
Bavendiek
<LI><A HREF="./Article3e.html">Linux Benchmarking: Part 3 -- Interpreting
Benchmark Results</a>,
by Andr&eacute; D. Balsa 
<LI><A HREF="./smith.html">LXNY at UNIX EXPO '97</a>, by Michael E. Smith
<LI><A HREF="./nelson.html">More Adventures with SAMBA </a>, by Dave Nelson
<LI><A HREF="./campo.html">My Linux Revolution</a>, by Ylian Saint-Hilaire
&amp; Erik Campo
<LI><A HREF="./ayers.html">New Release Reviews</A>, by Larry Ayers
<ul>
<li><A HREF="./ayers.html">KDE and Gnome</a>
<li><A HREF="./ayers2.html">Updates and Correspondence</A> 
</ul>
<LI><A HREF="./moore.html">Product Review: Applixware</A>, by Gary Moore
<LI><A HREF="./berglund.html">A Bit About Security</A>, by Marcus Berglund
<LI><A HREF="./rogers.html">The Standard C Library for Linux, Part one</A>,
by James M. Rogers
<LI><A HREF="./zawinski.html">xscreensaver</A>, by Jamie Zawinski
<LI><A HREF="./lg_backpage24.html">The Back Page</A> 
<ul>
<li><a HREF="./lg_backpage24.html#authors">About This Month's Authors</a>
<li><a HREF="./lg_backpage24.html#notlinux">Not Linux</a>
</UL>
</UL>
</td>
</tr><tr>
<td align=center>
<A HREF="lg_answer24.html"> 
<img src="../gx/wizard2.gif" border=0 alt="">
</a>
<A HREF="lg_answer24.html"><i>The Answer Guy</i></a>  
</td>
</tr><tr>
<td align=center>
<!-- <A HREF="gm.html"> -->
<IMG SRC="../gx/hammel/banner-3.gif" border=0 alt="">
<BR> 
<!-- </a> -->
<I>The Graphics Muse</I> will return next month.
</td>
</tr><tr>
<td align=center>
<img src="../gx/fisk/attndant.gif" border=0 alt=""><BR> 
<!-- <A HREF="./wkndmech_dec97/wkndmech.html"><I>The Weekend
Mechanic</I></a> -->
<I>The Weekend Mechanic</I> will return next month.
</td>
</tr><tr>
</table> 

<P> <HR><P> 
<!--=============================================================-->
<A HREF="./issue24.txt">TWDT 1 (text)</A><BR>
<A HREF="./issue24.html">TWDT 2 (HTML)</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.
 
<!--=============================================================-->
<P> <HR><P> 
Got any <I>great</I> ideas for improvements!  Send your
<A HREF="mailto:gazette@ssc.com">comments, criticisms, suggestions
and ideas.</A>

<P><hr><p>
This page written and maintained by the Editor of <I>Linux Gazette</I>,
<A HREF="mailto: gazette@ssc.com"> gazette@ssc.com</A>

<P> <HR> <P> 
<H4>&quot;Linux Gazette...<I>making Linux just a little more
fun!</I>&quot;</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="./lg_mail24.html#help">Help Wanted -- Article Ideas</a>
<li><a HREF="./lg_mail24.html#gen">General Mail</a>
</ul>
</td></tr></table>
</center>

<a name="help"></a>
<p><hr><p>
<!-- ===================================================================
-->
<center><H3> Help Wanted -- Article Ideas </H3></center>

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Sun, 30 Nov 1997 14:08:24 +0000<br>
From: David Stern <a
href="mailto:kotsya@mailhost2.cac.washington.edu">kotsya@mailhost2.cac.washington.edu</a><br>
Subject: Help Wanted -- Article Ideas
<p>
I'm at that point in my Linux development where I'm comfortable with 
the basics, and am venturing out to learn and discover the myriad of 
alternatives which exist.  While I appreciate the many alternatives, it 
can be difficult for someone with little experience to decide which 
MUA, MTA, proxy..is most suitable.  When each individual must 
personally begin anew to evaluate the field, unnecessary repetion of 
efforts results and often a selection is made based on incomplete 
information.  When the user later discovers a more suitable 
alternative, and possibly later another, a glutton of inefficiency 
results.
<p>
On that note, I'd like to suggest "head-to-head" comparision articles 
of similar programs.  A chart with columns and rows which represent the 
programs and the features would be invaluable for Linux users ranging 
from completely new to advanced, thus I would consider that a 
necessity.  Optionally, different recognitions may be given for 
exceptional achievement. Notes on individual programs or categories, 
and a brief summary would probably be required.
<p>
If thorough analytical evaluations were performed, this may exceed the 
resources and other imposed limitations of Linux Gazzette, but I'm not 
asking for that much depth.  I'm just looking for a cursory examination 
of programs with a comparison of features in a "side-by-side" format.
<p>
While I appreciate the reviews of individual programs, and enjoy the 
deeper attention which can be given, there is an ever-increasing number 
of alternatives available to the Linux user, and summary comparisons of 
programs is now a very real need, and the importance will only increase 
with time.
<p>
Please consider adding a side by side summary comparison of programs 
feature article.  I think this would not only make Linux Gazzette 
better than it already is, but also expand the readership.  Thanks and 
sincerely,
<p>
David Stern

<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Fri, 28 Nov 1997 08:35:04<br>
From: Erwin Penders <a
href="mailto:ependers@cobweb.nl">ependers@cobweb.nl</a><br>
Subject: passwd shadow convert problem
<p>
I am running RedHat 4.2 with normal passwords since a couple
of month's. Now i read the shadow-password howto and i
wanted this also to work on my system. After reading the manual
i went to a 'blank' redhat system with a couple of users and i 
ran /usr/sbin/pwconv5 and the shadow was up and running fine.
BUT on another system (same as the first) but with a lot more
users the pwconv5 runs but won't stop. It makes an empty shadow
file and i have to kill pwconv5 because it isn't doing anything.
<p>
I then copied the passwd file from the second to the first system
and tried on the first system... and the same problem.. no shadow.
<p>
Can anybody tell me what i do wrong !?
<p>
Thanks everybody.
<p>
Erwin Penders

<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Fri, 21 Nov 1997 01:39:51<br>
From: Manish Oberoi <a
href="mailto:oberoi@coeibm.rutgers.edu">oberoi@coeibm.rutgers.edu</a><br>
Subject: printing problems
<p>
Anyone that can help me.  I'd love to hear it.  I try running the lpr,
but everytime I get no name for local machine.  How do I set this and/or
what is the problem.
<p>
Manish Oberoi

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Wed, 10 Dec 1997 20:33:38 -0800<br>
From: Nolan Zak <a href="mailto:nzak@uniserve.com">nzak@uniserve.com</a><br>
Subject: Help Wanted!
<p>
I'm running RH 4.2 with kernel 2.0.30 on an Intel P90, I've only been at
this for a couple weeks so go easy on me if this is a stupid question.  :)
<p>
I'm trying to get ppp to working for dialing into my ISP, but no matter
what I do it disconnects.
<p>
Here's a small description of what is going on:
I set up /dev/modem --> /dev/cua1 and enabled full permissions on both.
Set the jumpers on my modem for com2, irq3.
Ran setserial to setup the proper device settings.
Re-compiled the kernel for ppp.
checked my modem init strings.
<p>
Now, no matter what I use (minicom, shell scripts, netcfg), the chat script
goes through the proper procedure and starts up ppp on the server side,
passes control to pppd, which connects ppp0 <--> /dev/modem, and after
that, the modem hangs up (within about 2 seconds).
<p>
I've tried all kinds of command line args to pppd, with no luck.  Can
anyone help me out here?
<p>
Later,
Nolan
<p>
My webpage--> http://users.uniserve.com/~nzak/welcome.htm

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Thu, 11 Dec 1997 22:20:54 -0500<br>
From: "atm" <a href="mailto:atm@dapa.com">atm@dapa.com</a><br>
Subject: Linux and routing
<p>
I have heard that you can connect a LAN to the internet via just 1
assigned IP address.  This is what I am planning on doing, however, I do
not know how one would go about doing it, and I would like to ask you if
you could do an article about it. <i>(Any takers among our readers?
--Editor)</i>
<p>
I plan on getting a cable modem soon, so the bandwidth would be pretty
high, so that is why I have decided to try to make this connection 
provide for my whole house via a LAN connection in my home. What I have
read is that you could use the private IPs, meaning the 10.x.x.x or so, 
192.168.x.x and some others for the IP of the LAN and have these connect
to some box (the LINUX box?) that would provide its connection to the
internet to the inside LAN connected to the box. Is the problem that 
you would have to route the assigned address to the private IPs for the
LAN use. I have also read that this would slow down the connection a
bit or something, but that is a price I am willing to pay. So, the 
summary of the question is how would I be able to connect many computers
to the internet via just 1 assigned IP address? I would like to be able
to do it using my LINUX box connected to the internet via cable modem,
and to my LAN via an Ethernet link. Any help is much appreciated,
thanks.

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Fri, 12 Dec 1997 10:41:54 +0000<br>
From: John Fisher <a
href="mailto:john@Atropos.apana.org.au">john@Atropos.apana.org.au</a><br>
Subject: Of Mouse and Men (no Cheese)
<p>
A very new boy to all this I am :-)  
<p>
Problem--
<p>
Using a 486 pc & Slackware I'm unable to use my mouse due to this
error:
<p>
Too many symbolic links encountered /dev/console
<p>
Would very much apprecaite some help.
<p>
Regards
<p>
John Fisher

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Fri, 12 Dec 1997 09:23:14 -0500<br>
From: <a
href="mailto:Wenhao_Meng@dadebehring.com">Wenhao_Meng@dadebehring.com</a><br>
Subject: try to use a 386 computer
<p>
I am new in the Linux world. How new? I am so new that I have just ordered
a Redhat release 5.0. Though this is a new world I am very glad I am one of
you, the Linux lovers.
<p>
I used to have a 386 25 MHz computer. Not long time ago I bought a Pentium
200 MHz computer. Since then I have not played with 386. Is there any easy
and economical way to connect the 386 to the Pentinum computer where I will
install the Release 5.0. If so, what I can do with it or at lease what I
can learn from it.
<p>
Thank you very much. Waiting for talking to you.

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Tue, 16 Dec 1997 08:44:15 -0700<br>
From: Doug Milligan <a href="mailto:doug@nwrks.com">doug@nwrks.com</a><br>
Subject: Help Wanted: RedHat 5.0 sound
<p>
Have installed RedHat 5.0 and configured the sound card using sndconfig. 
 All went well and I heard the demo sound bite of Linus.  However, I have 
never heard another sound since.  When browsing web sites with sound, no 
audio is played.  Anyone have any ideas?
<p>
Doug Milligan

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Thu, 25 Dec 1997 12:45:29 -0800 (PST)<br>
From: karl rossing <a
href="mailto:unixb0y@yahoo.com">unixb0y@yahoo.com</a><br>
Subject: LINUX AS A PDT
<p>
I was wondering if it is possble to get windows 95/NT to authenticate
to LINUX (using nis or nis+). I'm really getting tired of adding
accounts on the nt boxes for the linux boxes (for smb)...Is there any
commercial software availible? 
<p>
I know of d-sync [http://www.m-tech.ab.ca/psynch/index.html]
and NSGINA
[http://www.dcs.qmw.ac.uk/~williams/]
which seems a bit of work to setup...
<p>
I'm not really looking for passwd syncronisation, i'd like to
consolidate it to the linux box, because the users use both linux/95/nt.
<p>
nuff said
<p>
Thanks,<br>
Karl Rossing

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">
Date: Sun, 04 Jan 1998 23:54:37 +0100<BR> 
From: Gabriele Giansante <A
HREF="mailto:gvgsoft@madnet.it">gvgsoft@madnet.it</A> <BR> 
Subject: Perl and HTML
<P> 
please pardon me for my bad english.
I need help for one exam in my university. I have to do a script CGI in
Perl and I have to recall with HTML. I have done all. Perl compile
without errors the script but when I run the HTML page and choose the
link to the script, I obtain only a list of script. Why is it? I put in
the Perl script the line #!/usr/local/bin/perl. I know this is used to
indicate the Perl compiler. I work on Linux RedHat 4.1 trying to execute
the script with browser ARENA and NETSCAPE.
I enjoy if you can help me.
I see Linux Gazette now the first time and like it because I find many
help on my questions. Pardon my english and
Thank you.

<a name="gen"></a>
<P> <hr> <P> 
<!--===================================================================-->
<center><H3> General Mail </H3></center>

<P> <HR> <P> 
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Sun, 7 Dec 1997 11:15:36 PST<br>
From: Marty Leisner <a
href="mailto:leisner@sdsp.mc.xerox.com">leisner@sdsp.mc.xerox.com</a><br>
Subject: some requests
<p>
When including more than a few lines of code, include a link
to the code (i.e. the original source files).
<p>
In issue 22, I had problems with the line breaks cutting and
pasting a program from netscape into a window, saving and 
recompiling.
<p>
Marty

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Wed, 10 Dec 1997 13:36:05 -0600 (CST)<br>
From: Justin Dossey <a href="mailto:dossey@ou.edu">dossey@ou.edu</a><br>
Subject: Help for trival problems
<p>
I notice that a lot of people write the Gazette with fairly trivial
problems that are difficult to solve via non-interactive media
(email).  I'd like to remind some and inform others of the Linux
Internet Support Cooperative.  An excerpt from the LISC home page
(http://www.linpeople.org) says: 
<p>
"Since 1994, a small and somewhat foolish group of Linux system users
and administrators have been giving free technical support for Linux
under the name LinPeople, on Internet Relay Chat (IRC). With Linux
being a free operating system, it only seemed appropriate to provide a
free means of supporting it.Since 1994, a small and somewhat foolish
group of Linux system users and administrators have been giving free
technical support for Linux under the name LinPeople, on Internet
Relay Chat (IRC). With Linux being a free operating system, it only
seemed appropriate to provide a free means of supporting it."
<p>
It sometimes seems to linux users with problems that no one is
interested in helping them.  They post to news and don't get a reply,
they send email to the Gazette and feel ignored.  When you have a
problem, especially if you suspect that others might have the same,
try LISC.  With most internet-connected Linux boxen, it's just a
matter of typing:
<p>
ircii irc.linpeople.org
/join #linpeople
<p>
and then asking the question.
<p>
The people at LISC will do what they can to solve your problem,
teaching you about Linux at the same time. 
<p>
Justin Dossey

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Thu, 11 Dec 1997 06:35:00 -0500 (EST)<br>
From: Benjmin Lee Adamson <a
href="mailto:ladamson@itd.nrl.navy.mil">ladamson@itd.nrl.navy.mil</a><br>
Subject: Ah...  Goodstuff...
<p>
I just found the Linux Gazette...  I haven't read all of them yet, but I 
really dig what I've found so far... :)
<p>
Really really really really goodstuff. :)

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Fri, 12 Dec 1997 01:03:04 +0100<br>
From: Diego Cortassa <a
href="mailto:cortassa.diego@usa.net">cortassa.diego@usa.net</a><br>
Subject: Netscape Hidden tips:w

<p>
I saw Ivan Griffin's 'Netscape Hidden "Easter Eggs"' tip on Linux Gazette
Issue 23 and I've got one more cool special URL:
<p>
about:mozilla
<p>
Read the message and take a look to the N animation while downloading a web
page ! :-)
<p>
P.S.
Linux Gazette is GREAT !!!!!!!!!
<p>
   Diego Cortassa

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Sat, 20 Dec 1997 06:13:59 -0700<br>
From: Sengan Baring-Gould <a
href="mailto:senganb@cyrix.com">senganb@cyrix.com</a><br>
Subject: Loading times
<p>
Hi,
<p>
Thanks for the great work at linuxgazette.com.
I'd like to suggest an improvement: that the loading
does not get paused while the massive Linux Gazette
banner at the top of the page gets loaded... it's a pain
on a slow link.
<p>
Thanks
<p>
Sengan
<p>
<blockquote><i>(You might try turning off the display of graphical images
using your browser. Alternatively, you can wait a short while and then stop
the loading. Although the graphics may be incomplete, the text should be
there. --Editor)</i></blockquote>

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Sun, 21 Dec 1997 20:03:32 +0100<br>
From: Ingo Oeser <a
href="mailto:ioe@informatik.tu-chemnitz.de">ioe@informatik.tu-chemnitz.de</a><br>
Subject: Kewl new cover image
<p>
The subject just says what I would like to tell you: The cover image
(the one with "Linux Gazette" inside) really looks great!
<p>
cu<br>
  Ingo

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Tue, 30 Dec 1997 09:52:10 -0500 (EST)<br>
From: Kragen Sittler <a
href="mailto:sittler@erim-int.com">sittler@erim-int.com</a><br>
Subject: http://www.operasoftware.com/alt_os.html
<p>
Using WinNT at work, I discovered this fabulous browser called Opera.
It's the fastest web browser I've ever used, including Lynx, but has most
of the features I want from Netscape.  Also, it's fairly small -- right
now, my Opera process is under 5000K, even though it has six fairly heavy
web-pages open, and the download size just grew over one megabyte.
<p>
They're doing this funky pledge-drive thing where they ask people to
promise to buy copies of Opera for $35 for other platforms -- Mac, Be,
OS/2, and Linux -- before they've started developing Opera for those
platforms.  They say they haven't gotten much support from the Linux
community -- perhaps it's because not many people have heard of them?
<p>
(I learned about Opera from Borland's web pages, btw.)
<p>
Kragen

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Tue, 30 Dec 1997 20:37:26 +0530<br>
From: Sudhir Krishnan <a
href="mailto:sudhir@kaveri.tifr.res.in">sudhir@kaveri.tifr.res.in</a><br>
Subject: Can I help you?
<p>
I have been  using Linux for more than
a year now.  There's no other OS that fascinates me more than Linux! I
have been programming in Linux using gcc. I have made my own text editor
for Linux, with various modes for emulating emacs, vi and turbo c
editor keystrokes. Also there are modes for C, C++ and Pascal programs
so that the keywords are highlighted. My home page's location is:
<p>
<a
href="http://www.geocities.com/SiliconValley/Pines/9147/">http://www.geocities.com/SiliconValley/Pines/9147/</a>
<p>
Here I have an entire page dedicated to Linux tips and help, meant for
the Linux newbie. There are sections regarding
PPP configuration, kernel compilation, installation  and partitioning
etc. Please let me know if any of these could be
of help in any way.
<p>
regards,<br>
- sud -

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Wed, 31 Dec 1997 14:23:26 PST<br>
From: Marty Leisner <a
href="mailto:leisner@sdsp.mc.xerox.com">leisner@sdsp.mc.xerox.com</a><br>
Subject: Troff/Tex debate
<p>
I read Andrew Young's (aty@mintaka.sdsu.edu) letter in December,
then read Larry Ayers Issue 22 column...
<p>
I take issue with two of Larry's statements:
"Groff is the epitome of the non-user-friendly and cryptic unix
command-line tool."
Larry also says:
"Learning to use Groff on a Linux system might be an uphill battle, though Linux software developers must have
learned enough of it at one time or other, as most programs come with Groff-tagged man-page files. Groff's
apparent opacity and difficulty make LaTeX look easy in contrast!"
<p>
I'm not sure LaTeX is an improvement in these areas.  I've used troff 
for over 10 years and recently started to use LaTeX
(in fact, many
times LaTeX is far more obscure then troff).  And there are a
few features in LaTeX I miss (like:
<p>
.sy stat \n(.F | fgrep Change >change.time
.so change.time
.sy rm change.time
<p>
to get the document time into the document (as opposed to the "TeX"
time, or having to manually change the date, which is invariably wrong.
I have a makefile which puts this in a file, then includes the file)
<p>
The biggest problem is the lack of reference materials for troff.
I've used Unix Text Processing (Dougherty/O'Reilly) which
Andrew mentions...I've never seen or heard of the other book...
<p>
There are some references for troff/pic/indexing tools on:
http://cm.bell-labs.com/cm/cs/cstr.html (including the one mentioned later)
There are also good papers on troff in:
4.4BSD User's Supplementary Documents (I'm not sure
which ones can be redistributed and which ones are only in the 
book).
<p>
FYI, from Eric Raymond's online jargon file:
:troff:: /T'rof/ or /trof/ /n./   [Unix] The gray
eminence of Unix text processing; a formatting and phototypesetting
program, written originally in PDP-11 assembler and then in
barely-structured early C by the late Joseph Ossanna, modeled after
the earlier ROFF which was in turn modeled after Multics' RUNOFF by
Jerome Saltzer (*that* name came from the expression "to run
off a copy").  A companion program, {nroff}, formats output for
terminals and line printers.
<p>
In 1979, Brian Kernighan modified troff so that it could drive
phototypesetters other than the Graphic Systems CAT.  His paper
describing that work ("A Typesetter-independent troff," AT&T CSTR
#97) explains troff's durability.  After discussing the program's
"obvious deficiencies -- a rebarbative input syntax, mysterious
and undocumented properties in some areas, and a voracious appetite
for computer resources" and noting the ugliness and extreme
hairiness of the code and internals, Kernighan concludes:
<p>
<blockquote>
None of these remarks should be taken as denigrating Ossanna's
accomplishment with TROFF.  It has proven a remarkably robust
tool, taking unbelievable abuse from a variety of preprocessors
and being forced into uses that were never conceived of in the
original design, all with considerable grace under fire.
</blockquote>
The success of {{TeX}} and desktop publishing systems have
reduced `troff''s relative importance, but this tribute
perfectly captures the strengths that secured `troff' a place
in hacker folklore; indeed, it could be taken more generally as an
indication of those qualities of good programs that, in the long
run, hackers most admire.
<p>
marty

<P> <HR> <P>
<!--====================================================================-->
<IMG ALT=" " SRC="../gx/envelope.gif">

Date: Fri, 02 Jan 1998 15:33:15 +0100<br>
From: Wolfgang Laun <a href="mailto:Wolfgang Laun@aut.alcatel.at">Wolfgang
Laun@aut.alcatel.at</a><br>
Subject: Linux Gazette/GNU/Linux Benchmarking
<p>
A recent <i>LG</i> article by Andr&eacute Balsa on benchmarking provided interesting material to me.
<p>
Having a little experience with benchmarks myself (some of it while
checking optimizing efforts myself on a compiler) I have found
that caching on Intel CPUs can significantly distort results.
In the first part you mention that caching can be disabled via
the BIOS setup. If you write your own benchmarks (or have the source),
you could also consider using the pertaining CPU instructions, easily
inserted using gcc's _asm_. This could be used to keep caching up while
running the code you want to measure and to flush between cycles, in
order
not to "carry over" a cache bonus from the previous iteration.
<p>
Wolfgang
<p>

<P> <hr> <P> 
<!--================================================================-->
<center>Published in Linux Gazette Issue 24, January 1998</center>
<!--====================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG SRC="../gx/indexnew.gif" ALT="[ TABLE OF 
CONTENTS ]"></A>
<A HREF="../index.html"><IMG SRC="../gx/homenew.gif" ALT="[ FRONT 
PAGE ]"></A> 
<A HREF="./lg_tips24.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P>
<h5>This page written and maintained by the Editor of <I>Linux Gazette</I>,
<A HREF="mailto: gazette@ssc.com">gazette@ssc.com</A><BR> 
Copyright &copy; 1998 Specialized Systems Consultants, Inc. </H5> 
<P> <HR> <P> 

<H4>&quot;Linux Gazette...<I>making Linux just a little more fun!</I>
&quot;</H4>
<P> <hr> <P> 

<!-- QUICK TIPS SECTION ==================================================
-->
<center>
<H1><A NAME="tips"><IMG ALIGN=MIDDLE ALT="" SRC="../gx/twocent.gif">
More 2&#162; Tips!</A></H1> <BR>
Send Linux Tips and Tricks to <A HREF="mailto:gazette@ssc.com">
gazette@ssc.com
</A></center>

<p><hr><p>
<H3>Contents:</H3>
<ul>
<li><a HREF="./lg_tips24.html#ps/vc">Followup to PostScript and VC Key
Sequences (LG#23)</a>
<li><a HREF="./lg_tips24.html#ps/fu">PostScript $0.02 follow-up</a>
<li><a HREF="./lg_tips24.html#cheap">Yet another cheap tip</a>
<li><a HREF="./lg_tips24.html#dose">2 cent tip - dosemu</a>
<li><a HREF="./lg_tips24.html#find1">Re: 2c Tip "Finding What You Want
with find"</a>
<li><a HREF="./lg_tips24.html#find2">Re: Finding What You Want with find</a>
<li><a HREF="./lg_tips24.html#find3">Finding What You Want with find Part
III</a>
<li><a HREF="./lg_tips24.html#find4">More on finding</a>
<li><a HREF="./lg_tips24.html#find5">Another way to find</a>
<li><a HREF="./lg_tips24.html#find6">Yet another way to find</a>
<li><a HREF="./lg_tips24.html#find7">A final(?) way to find</a>
<li><a HREF="./lg_tips24.html#mozilla">Re: I need some help</a>
<li><a HREF="./lg_tips24.html#spin">Spinning Down Unused HDs</a>
<li><a HREF="./lg_tips24.html#egg1">LG Tips and Tricks (Netscape)</a>
<li><a HREF="./lg_tips24.html#egg2">Easter Eggs in Netscape</a>
<li><a HREF="./lg_tips24.html#calc">Calculator Tip</a>
<li><a HREF="./lg_tips24.html#nohack">Security script</a>
<li><a HREF="./lg_tips24.html#cron">Controlling cron.hourly</a>
<li><a HREF="./lg_tips24.html#ping">Syslog and ping</a>
</ul>

<P> <hr> <P> 
<!--================================================================-->

<a name="ps/vc"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Followup to PostScript and VC Key Sequences (LG#23)
</H3>
<p>
Date: Thu, 4 Dec 1997 16:43:47 +0000 (GMT)<br>
From: Ivan Griffin <a
href="mailto:ivan.griffin@ul.ie">ivan.griffin@ul.ie</a>
<p>
I just wanted to point out that some of my 2cent tips in Issue 23 of the
Linux Gazettte (December, 1997) were a little funky in their appearance.
<p>
While it doesn't really matter at all with the VC key sequences, it may
affect someone's understanding of the bad (imho) PostScript generated by
the Microsoft PS driver.
<p>
In this, the PostScript should have been pre-formatted using the
appropriate HTML tags.   Basically, the line
<pre>
    30000 VM?
</pre>
Is on its own, and not part of any other line.
All that you have to do to remove this artificial restriction on
viewing/converting the PostScript with ghostscript is to delete this line.
<p>
On another note, someone asked me where those key sequences come from.
If you check either keyboard.c or keyb_m68k.c, you will find an array of
function pointers called spec_fn_table[].
<p>
This array contains a list of functions to execute when certain key
combinations are received...  The key combinations listed in the
2cent tips execute the functions show_state(), show_mem() and show_regs()
<p>
You will find the source for function show_state() in
/usr/src/linux/kernel/sched.c
<p>
show_mem() is in
/usr/src/linux/arch/i386/mm/init.c
<p>
and show_regs() is in
/usr/src/linux/arch/i386/kernel/process.c
<p>
Best Regards,<br>
Ivan.
<p>

<P> <hr> <P>
<!--================================================================-->

<a name="ps/fu"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
PostScript $0.02 follow-up
</H3>
<p>
Date: Wed, 3 Dec 1997 13:51:48 -0500 (EST)<br>
From: Kyle Ferrio <a href="mailto:kbf@phy.duke.edu">kbf@phy.duke.edu</a>
<p>
In the December issue of LG, Ivan Griffin suggests using pstops from the
psutils package to accomplish two-up printing, gives a helpful example for
A4 paper, and points out that the command line needs to be tweaked for US
letter. If you're using US letter paper, then psnup (also part of
psutils) already does the job nicely with no uncomfortable thinking. It
might even work for A4, but I haven't checked. The psutils are generally
very handy, so folks might want to have a look. An RPM is available in
/contrib at ftp.redhat.com, for instance. Be advised that there seem to
be at least two very distinct packages called psutils floating around
Net-space. 

<P> <hr> <P>
<!--================================================================-->

<a name="cheap"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Yet another cheap tip.
</H3>
<p>
Date: Sun, 30 Nov 1997 03:48:40 -0800 (PST)<br>
From: Gary Johnson <a
href="mailto:gjohnson@season.com">gjohnson@season.com</a>
<p>
Sorry if it has been mentioned before, I thought I would throw
it in the Gazette pile just in case it hasn't . . .
<p>
Cat proof keyboard.
<p>
Switching to an unused virtual console is a quick way to blank
the screen and disable the keyboard.  To make one available try
<pre>
        setterm -clear > /dev/tty12
</pre>
on startup.  ALT F12 flips to it, or ALT CTRL F12 from X. 
Because there (probably) isn't a login running on that VC it
doesn't do much, which can be a feature.  A smart cat may still
luck into a troublesome key sequence.

<P> <hr> <P>
<!--================================================================-->

<a name="dose"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
2 cent tip - dosemu
</H3>
<p>
Date: Fri, 5 Dec 1997 00:55:55 -0500<br>
From: Joey Hess <a href="mailto:joey@kitenet.net">joey@kitenet.net</a>
<p>
I occasionally use dosemu, mainly to run some games I can't live without,
but I hate seeing the C:\> prompt. So I thought it'd be nice if there were a
way to tell dosemu what dos command to run, and it would run that command on
bootup. Here's a perl script that does just that. Read the comments at the
top, they explain some changes you need to make on the dos side of this. The
basic idea is, make a ~/dos_do.bat file, that contains the command you want
to run, and use lredir to let dosemu see your home directory. Then run the
batch file.
<pre>
#!/usr/bin/perl
# 
# This runs dosemu.
# 
# Any parameters psecified after "--" will be passed in to dosemu to be 
# run as dos commands.
#
# Setup: add to autoexec.emu:
#       lredir.com h: linux\fs\${home}
#       if exist h:\dos_do.bat call h:\dos_do.bat
#
# GPL Copyright 1996, 1997 Joey Hess

# Split params into dosemu parameters and dos commands.
while ($a=shift @ARGV) {
	if ($a=~m/--/ ne undef) { last }
	$dosemu_command_line.="$a ";
}
$dos_command_line=join(' ',@ARGV);
$dos_command_line=~s/;/\r\n/g;

open (OUT,">$ENV{HOME}/dos_do.bat") || exit print "$ENV{HOME}/dos_do.bat:
$!";
if ($dos_command_line) {
	print OUT "$dos_command_line\r\n"; # note dos CR LF
	print OUT "exitemu\r\n";
}
close OUT;
system "/usr/bin/dos $dosemu_command_line";
unlink "$ENV{HOME}/dos_do.bat";
</pre>

<P> <hr> <P>
<!--================================================================-->

<a name="find1"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Re: 2c Tip "Finding What You Want with find"
</H3>
<p>
Date: Wed, 03 Dec 1997 16:03:30 +0100<br>
From: Mike Neuhauser <a href="mailto:mike@gams.co.at">mike@gams.co.at</a>
<p>
Jon Rabone, jkr@camcon.co.uk, wrote in the December 97 issue of LG:
<p>
&gt; In the October 97 issue, Dave Nelson suggests using<br>
&gt;<code> find . -type f -exec grep "string" /dev/null {} \;</code><br>
&gt; to persuade grep to print the filenames that it finds the search<br>
&gt; expression in. This starts up a grep for each file, however. A<br>
&gt; shorter
and more efficient way of doing it uses backticks:<br>
&gt;<br>
&gt;<code> grep "string" `find . -type f`</code><br>
&gt;<br>
&gt; Note however, that if the find matches a large number of files you<br>
&gt; may
exceed a command line buffer in the shell and cause it to complain.
<p>
To avoid an overflow of the command line buffer use:
<pre>
        find . -type f | xargs grep "string"
</pre>
This may give problems if filenames contain white space (e.g. touch
"test file") -- to avoid use:
<pre>
        find . -type f -print0 | xargs -0 grep "string"
</pre>
Note also that find doesn't follow symbolic links to directories per
default. Using find with the option -follow does the trick (find .
-follow ...).

<P> <hr> <P>
<!--================================================================-->

<a name="find2"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Re: Finding What You Want with find
</H3>
<p>
Date: 5 Dec 1997 17:47:50 -0000<br>
From: Dale K. Hawkins <a
href="mailto:dhawkins@mines.edu">dhawkins@mines.edu</a>
<p>
<code> find . -type f -exec grep "string" /dev/null {} \;</code>
<p>
That is how I used to run things too, but a friend showed me the xargs
program. Very nice. So one could turn the above statement to
something like:
<pre>
find . -type f | xargs fgrep "string" /dev/null
</pre>
Again, the /dev/null will force the name of the file to be printed (in
the unlikely case that find only found one file name).  This has the
benefit of not invoking a new grep process each time.
<p>
But for a really slick (and much faster search) try this:
<pre>
locate $PWD | grep "^$PWD" |xargs fgrep "string" /dev/null
</pre>
This assumes that your locate database is current for the directory to
be searched.  It does have a problem though: it tries to grep
everything, including directories!
<pre>
locate $PWD | grep "^$PWD" |xargs -ifilename sh -c \
  "if [ -f filename ]; then echo filename; fi " | \
  xargs fgrep "string" /dev/null
</pre>
And as an exercise for the reader: Take a look at lesspipe.sh (if it is
installed; download it
otherwise!)
See if you can create a shell script called supercat (or something)
which preprocesses the input to prevent grep'ing binary files, etc.
<p>
You gotta love UNIX and especially Linux!
<p>
-Dale K. Hawkins

<P> <hr> <P>
<!--================================================================-->

<a name="find3"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Finding What You Want with find Part III
</H3>
<p>
Date: Thu, 11 Dec 1997 17:12:46 +0100 (MET)<br>
From: Axel Dietrich <a
href="mailto:Axel.Dietrich@neuroinformatik.ruhr-uni-bochum.de">Axel.Dietrich@neuroinformatik.ruhr-uni-bochum.de</a>
<p>
&gt;In the October 97 issue, Dave Nelson suggests using<br>
&gt;<br>
&gt;<code>  find . -type f -exec grep "string" /dev/null {} \;</code><br>
&gt;<br>
&gt;to persuade grep to print the filenames that it finds the search<br>
&gt;expression in.
<p>
Besides Jon Rabone's "shorter and more efficient" version in the
December 97 issue using backticks:
<pre>
  grep "string" `find . -type f`
</pre>
the following variant can be used without the danger of exceeding
a command line buffer limit:
<pre>
  find . -type f -exec grep -l "string" {} \;
</pre>
The "-l" switch tells grep to show the name of the file in which
"string" was found.
<p>
To limit such a search on selected files I use a combination of
the -type and -name switches.
<pre>
  find . \( -type f -name "*\.html" \) -exec grep -l "string" {} \;
</pre>      
This searches in all files with the suffix "html" for the string
"string" and outputs the name(s) of the file(s) in which "string" 
was found.                                 
<p>
Axel
<P> <hr> <P>
<!--================================================================-->

<a name="find4"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
More on finding
</H3>
<p>
Date: Tue, 16 Dec 1997 14:12:57 +0100 (MET)<br>
From: Alexander Larsson <a
href="mailto:alla@lysator.liu.se">alla@lysator.liu.se</a>
<p>
In the December 97 issue Jon Rabone wrote:
<p>
------------------------------------<br>
This starts up a grep for each file, however. A shorter and
more efficient way of doing it uses backticks:
<pre>
grep "string" `find . -type f`
</pre>
Note however, that if the find matches a large number of files you may
exceed a command line buffer in the shell and cause it to complain.<br>
------------------------------------
<p>
A better way would be to use:
<pre>
find . -type f | xargs grep "string"
</pre>
which starts up a new grep everytime the command line buffer is full.
<p>
/ Alex

<P> <hr> <P>
<!--================================================================-->

<a name="find5"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Another way to find
</H3>
<p>
Date: Sat, 27 Dec 1997 12:06:47 -0500<br>
From: <a href="mailto:rchandra@letter.com">rchandra@letter.com</a>
<p>
In an article in the LG, it was suggested that, in order to cut down
on having to fork(2)/exec(2) for each grep when you're searching
through a tree of files, you use the shell's capability of command
substitution (for the file names paramaters to the grep command) with
"backquotes," "grave accents," "backticks," etc. as they are commonly
called ("`").  In that little tidbit, it is noted that it has the
limitation of the system-wide imposed limit on number of arguments,
and I possibly think there might be a length issue as well (too many
total bytes).  Enter xargs(1).
<p>
The job of the xargs command is to read its stdin and use the
resultant strings as arguments to some command prefix (such as "grep
-n somestring"), much like backquotes work.  However, the xargs
program is "aware of" the limitations imposed by the system, and will
run the command prefix as many times as necessary to exhaust the list
provided on stdin, while on each run giving the command only the
maximum number of arguments and the maximum byte count (?) that an
exec(2) call can handle.  Thus, provided that the program named in the
command prefix follows the UNIX program protocol of iterating over its
non-option arguments, one can search one, hundreds, thousands, even
millions of files with a line like:
<pre>
find / -type f -print | xargs grep -n 'where is that string?'
</pre>
As usual, consult your favorite source of documentation, such as your
local man pages, for ways to get even craftier with xargs.

<P> <hr> <P>
<!--================================================================-->

<a name="find6"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Yet another way to find
</H3>
<p>
Date: Mon, 29 Dec 1997 10:49:52 +0100<br>
From: Guido Socher <a
href="mailto:eedgus@aken104.eed.ericsson.se">eedgus@aken104.eed.ericsson.se</a>
<p>
In recent Linux Gazette issues there were a couple of ideas on how
to recursively grep around files and directories. Very useful, but it can
cause problems when you have binaries (e.g some executable) in the
directories that contain somewhere the string that you are looking
for.
The result is most of the time an unusable terminal because some control
character from the binary file has set it to graphics mode.
There are, of course, ways to make the terminal readable again but
the best is to avoid it in the first place.
<p>
Let's just remove the unprintable characters. They are unreadable anyway!
The command
<pre>      sed -e 's/[^ -~][^ -~]*/ /g'</pre>
removes multiple occurrences of non printable/control characters and
replaces them by a single space. The [^ -~] matches all characters not
in the ASCII range from SPACE to Tilde.
This command can be easily combined (using a pipe) with the find and grep.
Here is a little script, I called it grepfind, that does it all:
<pre>
#!/bin/sh
#save this in a file called grepfind and do a "chmod 755 grepfind"
#
if test $# = 0 -o "$1" = "-h" -o "$1" = "--help" ; then
echo ' grepfind -- recursively descends directories and egrep all files '
echo ''
echo ' Usage: grepfind [--help][-h][start_directory] egrep_search_pattern'
echo ''
echo ' The current directory is used as start_directory if parameter'
echo ' start_directory is omitted. The search is case insensitive.'
echo ' Multiple occurrences of control characters are replaced by a single'
echo ' space. This makes it possible to grep around in files that contain'
echo ' binary data and strings without setting the terminal accidently '
echo ' to graphics mode.'
echo ''
echo ' Example: grepfind /home "hello world" '
else
if [ "$2" = "" ]; then
find . -type f -exec egrep -i "$1" /dev/null {} \; | sed -e 's/[^ -~][^
-~]*/ /g'
else
if [ -d "$1" ];then
    find $1 -type f -exec egrep -i "$2" /dev/null {} \; | sed -e 's/[^
-~][^ -~]*/ /g'
else
    echo "ERROR: $1 is not a directory"
fi
fi
fi
#__END__OF_grepfind
</pre>

<P> <hr> <P>
<!--================================================================-->

<a name="find7"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
A final(?) way to find
</H3>
<p>
Date: Wed, 31 Dec 1997 14:31:57 PST<br>
From: Marty Leisner <a
href="mailto:leisner@sdsp.mc.xerox.com">leisner@sdsp.mc.xerox.com</a>
<p>
In the last few months, there's been a few letters (by Dave Nelson,
Jon Rabone, some more) on how to grep with file names.
<p>
Instead of using the trick:
<pre>
                find . type f -exec grep "string" /dev/null {} \;
</pre>
and other variatiants, or doing
<pre>
                grep "string" $(find . -type f)
</pre>
1) use the -H option of grep 2.1 (to print file names, not in 2.0)<br>
2) use xargs to overcome problems with buffer size
<pre>
        find . -type f | xargs grep &lt;pattern&gt; -H
</pre>
Marty

<P> <hr> <P>
<!--================================================================-->

<a name="mozilla"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Re: I need some help
</H3>
<p>
Date: Sun, 7 Dec 1997 14:25:25 +0100 (MET)<br>
From: Roland Smith <a href="mailto:rsmit06@ibm.net">rsmit06@ibm.net</a>
<p>
Javier,
<p>
In response to your article in the mailbag of the dec. 97 Linux Gazette:
<p>
You need to set the environment variable MOZILLA to the directory
containing Netscape's files.
<p>
There are two ways of doing this:
You can type `export MOZILLA_HOME=/usr/local/netscape' every time you
start your computer, or you can edit /etc/profile. This is a
file read by the bash shell. Add the following to this file 
(assuming the Netscape stuff is in /usr/local/netscape):
<pre>
MOZILLA_HOME="/usr/local/netscape"
export MOZILLA_HOME
</pre>
You also need to add an entry for Netscape to your window-manager's
initialization file, so it shows on the toolbar and/or menu. How to do
this depends on the window manager you use.
<p>
If you're using fvwm2-95, add the following to the .fvwm2rc95 file in your
home directory:
<pre>
# add to this menu:
AddToMenu "Utilities" "Utilities" Title
+ "Netscape%mini-nscape.xpm%"   Exec netscape -geometry 931x683+54+9 &
</pre>
Regards, Roland

<P> <hr> <P>
<!--================================================================-->

<a name="spin"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Spinning Down Unused HDs
</H3>
<p>
Date: Mon, 08 Dec 1997 14:21:31 -0500<br>
From: Peter S Galbraith <a
href="mailto:galbraith@mixing.qc.dfo.ca">galbraith@mixing.qc.dfo.ca</a>
<p>
In the December issue of LG tips, you discuss the hdparm command to spin
down disks.  I tried this on my old SCSI disk:
<pre>
bash-2.01# hdparm -S6 /dev/sdb

/dev/sdb:
 operation not supported on SCSI disks
</pre>
Too bad!  
I use the `scsi-idle' kernel patch to do this very same thing on SCSI, 
and I was eager to try your trick to finally stop having to patch the
kernel at evey upgrade.
<p>
Too bad it don't seem to work on SCSI disks (it's also strange that the man
page doesn't say this...)

<P> <hr> <P>
<!--================================================================-->

<a name="egg1"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
LG Tips and Tricks (Netscape)
</H3>
<p>
Date: Fri, 12 Dec 1997 02:56:16 -0600<br>
From: Christian J Carlson <a
href="mailto:ccarlson@means.net">carlson@means.net</a>
<p>
   * Date: Sun, 9 Nov 1997 22:00:31 +0000 (GMT)<br>
   * From: Ivan Griffin ivan.griffin@ul.ie<br>
   *<br>
   * These special URLs do interesting things in Netscape Navigator and
     Communicator.<br>
   *<br>
   * about:cache gives details on your cache<br>
   * about:global gives details about global history<br>
   * about:memory-cache<br>
   * about:image-cache<br>
   * about:document<br>
   * about:hype<br>
   * about:plugins<br>
   * about:editfilenew<br>
   *<br>
   * view-source:URL opens source window of the URL<br>
   *<br>
   * Ctrl-Alt-F take you to an interesting site :-)<br>
<p>
     This appeared in Linux Gazette, December 1997.
     There is one more way cool easter egg that's in Netscape.
<p>
     First, type "about:mozilla" to get the Mozilla easter egg. Then,
     watch your "N" in the upper right hand corner of Netscape. Whenever
     you access a website, Mozilla himself will appear instead of the
     boring flying stars, etc. As far as I know, this has been in every
     version of Netscape since at least version 2.0.
     Of course, this only works in the Linux version (I don't know about
     other *nix versions) of Netscape, NOT Windows95 :).
<p>
     Christian J. Carlson

<P> <hr> <P>
<!--================================================================-->

<a name="egg2"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Easter Eggs in Netscape
</H3>
<p>
Date: Tue, 30 Dec 1997 0:47:12 +1100 (EADT)<br>
From: Michael Lake <a
href="mailto:mikel@BlueSky.com.au">mikel@BlueSky.com.au</a>
<p>
I have just been reading the Linux gazette Issue 23 about the
easter eggs in Netscape and thought that I would try some URL's
of my own. I am using Netscape 3.01 for Linux. A little
experimentation found the following--
<p>
about:foo
<p>
The message that is returned is: Whatchew talkin' 'bout, Willis?
Instead of foo you can use anything that is not understandable to Netscape.
<p>
A more interesting one that I tried is--
<p>
about:mozilla
<p>
This gives a very interesting quotation which I will leave to the reader
to discover.
<p>
Enjoying the Linux Gazette immensely,
<p>
Best Regards,<br>
Michael Lake<br>
Sydney, Australia

<P> <hr> <P>
<!--================================================================-->

<a name="calc"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Calculator Tip
</H3>
<p>
Date: Sun, 14 Dec 1997 19:23:55 -0500<br>
From: Michael McLay <a href="mailto:mclay@nist.gov">mclay@nist.gov</a>
<p>
The Issue #21 and #23 tips column gave tips for doing calculations
without having to fire up a heavyweight GUI calculator. It is very
handy to be able to do all the number entry through the command line,
but I was surprised to see perl and awk used in the two examples. The
bc has been around forever in Unix and would be the logical first
choice to many oldtimers. And bc can do the calculations to any
precision desired if that is important.
<p>
Another good option is Python. Python can be run in an interactive
mode like bc, so previous calculations can saved as variables and
reused. Python also can be built so that past lines can be edited
using the standard GNU readline library editing operations. For
instance, in the following interactive sequence the previous-line key
will restore the last executed line to the prompt and the line edit
keys, such as backward-char and delete can then be used to edit the
line.
<pre>
~: python
Python 1.5b2 (#2, Dec 12 1997, 16:13:12)  [GCC 2.7.2] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
&gt;&gt;&gt; a = (10+3)/7
&gt;&gt;&gt; a
1
&gt;&gt;&gt; a = (10.+3)/7
&gt;&gt;&gt; a
1.85714285714
&gt;&gt;&gt; a/32
0.0580357142857
&gt;&gt;&gt; "it takes %7.2f percent" % a 
'it takes    1.86 percent'
&gt;&gt;&gt; "it takes %-7.2f percent" % a 
'it takes 1.86    percent'
&gt;&gt;&gt; from Numeric import *
&gt;&gt;&gt; b = array(arange(12))
&gt;&gt;&gt; b.shape = 3,4
&gt;&gt;&gt; b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
&gt;&gt;&gt; b/a
array([[ 0.        ,  0.53846154,  1.07692308,  1.61538462],
       [ 2.15384615,  2.69230769,  3.23076923,  3.76923077],
       [ 4.30769231,  4.84615385,  5.38461538,  5.92307692]])
&gt;&gt;&gt; 
</pre>
This example also shows the Python Numeric[1] module being used at the
command line. Any Python module that is installed with the
interpreter can be imported and used in the interactive mode.
<p>
Of course if you want to make Python do a one-liner from the command
line that is possible also:
<pre>
~: python -c "print 34./33"
1.0303030303
</pre>
or to format the output:
<pre>
~: python -c "print 'eat %3.4f %s' % (1.444e5/32,'more fish')"
eat 4512.5000 more fish
</pre>
[1] The Numeric module in this example is not built into the standard
distribution.  See the matrix-sig page for details on how to add it to
the module library if you can't find it on your system.

<P> <hr> <P>
<!--================================================================-->

<a name="nohack"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Security script
</H3>
<p>
Date: Mon, 15 Dec 1997 20:49:53 -0600 (CST)<br>
From: Corey G <a
href="mailto:cgaff@interaccess.com">cgaff@interaccess.com</a>
<p>
Often when I leave my machine connected to the Internet for prolonged
periods I worry about hackers.  I wanted a program that would know if
a process was started by anyone, including root, that was not originally
on the machine.
<p>
This caused me to program this script.  I dont know if something similar
exists but I have tested this very throughly and it works rather well.  It
can be frustrating at times when you are active on the machine but works
very well for idle times.
<p>
HOW IT WORKS:
<p>
This scripts grabs all the processes when first invoked and saves them to
a temporary file.  After a default of 10 seconds the process table is
checked against any new processes that were started.  If these processes
were not listed in the "TRUSTED_ITEMS" variable they will be killed
immediately.  
<p> 
USAGE:
<p>
Once you have all the necessary processes running on your machine start
the script as root.  It will make the necessary directories on the machine
in a safer place than just /tmp.  I have created two variables named
"TRUSTED_ITEMS" and "TRUSTED_USERS".  These can be used to ignore some
users or programs that you never want killed.  Be careful since sometimes
you will need to include more than one item for some programs.  For
example, if you dont want xterms killed you must add "xterm" and "bash" if
you are running bash as your default shell. 
<p>
Note: When testing this script make certain that nothing important is
running.  I take no blame for any wrong doing from this script.
<p>
To start the script:<code> nohup ./secmach &</code>
<p>
I am always looking for ways to improve this script so feel free to e-mail
your comments or suggestions to me.
<p>
Good Luck !!!
<pre>
#!/bin/sh
# Secmach - security program
# v1.0  12-14-97
# By: Corey Gaffney

export PATH=/usr/bin:/bin:/sbin

COUNTER=0
LOCATION=/usr/secmach
CHECK_TIME=10
TRUSTED=/usr/secmach/trusted
UNTRUSTED=/usr/secmach/untrusted
DIFFKILL=/usr/secmach/diffkill
TRUSTED_USERS="johndoe"
TRUSTED_ITEMS="$TRUSTED_USERS|pppd|chat|netscape|xterm|egrep|ps|sed|secmach|awk"

if [ ! -s $LOCATION ]
        then
        mkdir $LOCATION
        chmod 700 $LOCATION
        fi

while :
do
COUNTER=`expr $COUNTER + 1`
if [ $COUNTER -eq 1 ]
        then
        ps -aux | sed -e '1d' | awk '{print $2}' > $TRUSTED
fi
        sleep $CHECK_TIME

ps -aux | sed -e '1d' | egrep -v $TRUSTED_ITEMS | awk '{print $2}' >
$UNTRUSTED
        diff $TRUSTED $UNTRUSTED > $DIFFKILL
        KILL=`grep ">" $DIFFKILL | awk '{print $2}'`
        kill -9 $KILL
done
</pre>

<P> <hr> <P>
<!--================================================================-->

<a name="cron"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Controlling cron.hourly
</H3>
<p>
Date: Sun, 21 Dec 1997 10:36:16 -0500 (EST)<br>
From: Jeff Johnson <a href="mailto:jbj@JBJ.ORG">jbj@JBJ.ORG</a>
<p>
According to Gary Turkington:<br>
&gt; I know this one of those *really* simple ones, but it's beating me. How<br>
&gt; do I stop the cron.hourly setup mailing a 'fortune' to root? This used<br>
&gt; to happen daily, no biggie, but when I upgraded to 5.0, its hourly.. spam<br>
&gt; :)
<p>
This is a variant of the "not a typewriter" error that causes loss of
hair when using rlogin :-)
<p>
The analysis goes like this:
<p>
1) Cron runs a job an hourly job as root.<br>
2) To run the job, a non-interactive (i.e. stdin/stdout are *not* connected<br>
to a tty but to cron) shell is started.<br>
3) The shell reads its init files: /etc/profile, ~/.bashrc, whatever.<br>
4) The init files execute fortune.<br>
5) The job is performed.<br>
6) Cron detects output, so it mails it to root.
<p>
Fix by identifying which shell init file is executing fortune and
avoiding fortune when not interactive. There are a couple of
techniques for doing this, often by checking whether PS1 is
set.
<p>
73 de Jeff

<P> <hr> <P>
<!--================================================================-->

<a name="ping"></a>
<H3><IMG ALIGN=BOTTOM ALT="" SRC="../gx/lil2cent.gif">
Syslog and ping
</H3>
<p>
Date: Tue, 30 Dec 1997 17:58:59 -0500 (EST)<BR> 
From: Andrew Tucker <a href="mailto:andrew.tucker@kplus2.aces.k12.ct.us">andrew.tucker@kplus2.aces.k12.ct.us</a>
<P> 
Hi, this is a small hack I did to allow logging of users's use of ping
through syslog. With more and more larger systems running Linux, and more
and more situations of ICMP abuse, any shortcut a system administrator can
use to prevent such abuse is helpful. Click <A HREF="./syslog-ping.tar.gz">
here</A> to dowload the scripts.
<P> 
-- Andrew 


<P> <hr> <P> 
<!--================================================================-->
<center>Published in Linux Gazette Issue 24, January 1998</center>
<P> <hr> <P> 
<!--================================================================-->
<A HREF="./lg_toc24.html"><IMG SRC="../gx/indexnew.gif" ALT="[ TABLE OF 
CONTENTS ]"></A> <A HREF="../index.html"><IMG SRC="../gx/homenew.gif" 
ALT="[ FRONT PAGE ]"></A> <A HREF="./lg_mail24.html"><IMG
SRC="../gx/back2.gif" 
ALT=" Back "></A>
<A HREF="./lg_bytes24.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>

<P> <hr> <P>
<h5>This page maintained by the Editor of <I>Linux Gazette</I>,
<A HREF="mailto: gazette@ssc.com">gazette@ssc.com</A><BR> 
Copyright &copy; 1998 Specialized Systems Consultants, Inc. </H5> 
<P> 

<H4>&quot;Linux Gazette...<I>making Linux just a little more fun!</I>&quot;</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="./lg_bytes24.html#general">News in General</a>
<li><a HREF="./lg_bytes24.html#software">Software Announcements</a>
</ul>
</td></tr></table>
</center>

<a name="general"></a>
<p><hr><p>
<!-- =================================================================== -->
<center><H3> News in General </H3></center>

<P> <hr> <P> 
<!-- =================================================================== -->
<center><IMG ALT=" "   SRC="./gx/cover46.jpg"></center>
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
February <I>Linux Journal</I>
</H3>
<P> 
The February issue of <A HREF="http://www.linuxjournal.com/"><I>Linux
Journal</I></A> will be hitting the newstands
this week. The focus of this issue is Databases. Also, included is an article
on the making of the movie <I>Titanic</I> -- Digital Domain used Linux
extensively in generating the graphics for this movie. Check out the
<A HREF="http://www.ssc.com/lj/issue46/index.html">Table of Contents</A>.

<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Apache Webserver Serves Over Half the Internet
</H3> 
<P> 
Date: January 5, 1998
<P>
The Apache Web Server, from the Apache Group (http://www.apache.org/),
now serves over half the domains on the Internet, according to the
latest Netcraft Web Server Survey (http://www.netcraft.com/). According
to the January 1998 survey, the Apache server and its derivatives
serve 50.24% of the 1,834,710 sites found by Netcraft.
<P>
For complete press release, click <A HREF="./apache.html">here</A>.

<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Linux on Celsius Workstations
</H3> 
<P> 
Date: November 28, 1997
<P> 
Siemens Nixdorf (SNI) is selling there new "Celsius"  Workstations with
WinNT AND Linux. SNI is the first major Producer that offers Workstations
with Linux on board. The Linux-Support is done by the well known 
Linux Distributor SuSE GmbH. The machine is targeted for the universitys
and already in use there with linux. The "Celsius" is based on a
Pentium-II with 266/300 Mhz, 512KB Cache, 32MMB ECC-SDRAM, 2GB drive,
a PCI/AGP based matrox millennium II with 4MB, FastEthernet, Diskdrive
and Keyboard. The price shall be between 7300-8200DM but its exspected to 
fall. 
According to SNI the "Celsius 1000" (300Mhz Version) gets 11,9 SPECint95 
and 8,6 SPECfp with WinNT. (no Linux values yet.)

<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Freeware OCR Project
</H3> 
<P> 
A mailing list has been started for discussion of the design and
implementation of a freeware Optical Character Recognition program for
Unix.  
<P> 
Scanner support for Unix is under rapid development thanks to projects
such as <A HREF="http://www.mostang.com/sane/">SANE</A>, and applications such as
<A HREF="http://www.gimp.org/">GIMP</A> are beginning to benefit from this support. OCR is one major
application missing from the freeware Unix world, and has long been on
the FSF's project list, as well.  The project is going to have to
create both a user interface and a character recognition engine.
<P>
The project Web page is at <A
HREF="http://starship.skyport.net/crew/amk/ocr/">http://starship.skyport.net/crew/amk/ocr/</A>; 
look there for announcements about the project's status.
<P> 
For more information: <BR> 
Andrew Kuchling, <A HREF="mailto:amk@magnet.com">amk@magnet.com</A>


<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
5th International Linux Kongress 1998
</H3> 
<P> 
The 5th International Linux Kongress 1998 will be held from June 3
to June 5 at the University of Cologne (K&ouml;ln). It follows the tradition
of the Linux conference series (Heidelberg 94, Berlin 95/96 and
W&uuml;rzburg 97) which has evolved into the most important meeting for
Linux experts and developers.
<P> 
The conference will offer up to 25 talks during two days (June 4 and 5)
in two parallel tracks. The first track will be dedicated to Linux
development, the second track will be intended to accomodate talks about
Linux applications and usage. Each talk will be 40 minutes (possibly
including discussion). The language of the talks will be English or
exceptionally German.
<P>
For more information:<BR> 
GUUG office, Ms. Bester,
<A HREF="mailto:info@linux-kongress.de">info@linux-kongress.de</A><BR>
<A HREF="http://www.linux-kongress.de/">http://www.linux-kongress.de/</A> 

<P> <HR> <P> 
<!--===================================================================-->
<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Linux in the News
</H3>
<P>
Articles by Charles J. Fisher worth checking out in <I>Unixworld On-line</I>:<BR> 
<A HREF="http://www.unixworld.com/uworld/archives/97/tutorial/017.html">
Creation and Maintenance of Virtual Hosts </A> <BR> 
<A HREF="http://www.unixworld.com/uworld/archives/97/tutorial/015/015.html">
Linux, PPP and Windows 95 </A> <BR>  
<P> 
<center>-------------------------------</center>
<P>
More Linux articles: <BR> 
"Linux Grows Up" -- Red Hat's commercial Linux beats NT at its own
game.<BR> 
<A HREF="http://currents.net:80/magazine/national/1524/inet1524.html">
<I>Computer Currents</I></A>
<P> 
"Intel-Based Unix: A Great Solution for Intranets" <BR> 
<A HREF="http://www.fcw.com/pubs/gbb/1997/1201/GBB-UNIX-12-1-1997.html">
<I>Federal Computer Week</I></A> 
<P> 
<center>-------------------------------</center>
<P>
Better late than never:<BR> 
On November 15 Linus announced that the F00F bug
had been fixed in the 2.0.x kernel. Click <A HREF="./linus.html">here</A> to
read what he had to say.

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Linux Bibliography
</H3>
<P>
After a three month hiatus, the 
<A
HREF="http://shell.nanospace.com/~markst/linux/">
Linux Bibliography</A> is back on line. The bibliography has
grown a lot in size since it was last "live": there are now almost 50
Linux specific titles listed.
<P> 
While the site is back up, it is still in beta mode. You'll need a
Javascript compatible browser to see it, and some of the JavaScript
appears to be a bit buggy with older browsers. Most of the forms are
working, but not all of them just yet. 
<P>
For more information:
Mark Stone, <A
HREF="mailto:markst@shell.nanospace.com">markst@shell.nanospace.com</A> 

<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Linux Business Solutions
</H3> 
<P> 
Announcing:  A project to generate and improve documentation
of Linux Businesss Solutions.   This project is a few days
old, so far.
<A HREF="http://linas.org/linux/web-project.html">
http://linas.org/linux/web-project.html</A>.
<P> 
There is a separate mailing list for this project.  Web page owners,
writers, marketing types & document mangement hackers are encouraged
to join.
<P> 
For more information: <BR>  
<A HREF="mailto:linas@linas.org">linas@linas.org</A>

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
The Linux Project Server
</H3>
<P> 
The Linux Project Server has a new <A
HREF="http://www.projects.ml.org/">home page</A> providing counters, guestbooks
and many many other such scripts.
<P> 
For more information:<BR> 
Gerhard Poul, <A HREF="mailto:gerhard@shadow.ccc.at">gerhard@shadow.ccc.at</A><BR> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Freely Redistributed Software Track - USENIX'98
</H3>
<P> 
Come hear the latest about the full range of freely redistributable
software--with pointers to the code--including Linux, FreeBSD, GNU,
netBSD, OpenBSD Samba, and more.
<P> 
FREENIX,
The Freely Redistributed Software Track,
at the USENIX 1997 Conference held
June 15-19, 1998 in
New Orleans, Louisiana.
<P> 
For more information:
<A
HREF="http://www.usenix.org/events/no98/">http://www.usenix.org/events/no98/</A> 
<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Linux Software Database
</H3> 
<P> 
The Linux Software Database is now up and running
at <A HREF="http://www.txcc.net/~cl/">http://www.txcc.net/~cl/</A>.
<P> 
Unlike software sites that list only what software the author has found
the
LSDB allows Linux users connecting to the database to add software thay
have found or use. This way both authors of software and users of the
site can add there titles on-line.
<P> 
For more information: <BR> 
<A HREF="mailto:cl@txcc.net">cl@txcc.net</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
S.u.S.E. Discussion Groups
</H3>
<P> 
S.u.S.E. has set up two lists for discussions and announcenments concerning
the S.u.S.E. Linux Distribution:
<P> 
  suse-announce-e  --  Announcements of S.u.S.E. LLC    (english)
  suse-linux-e     --  Discussions about S.u.S.E. Linux (english)
<P> 
To subscribe, send an email to majordomo@suse.com with 'subscribe
<i>listname</i>' in the body.
<P> 
For more information: <BR> 
Bodo Bauer, <A HREF="mailto:bb@suse.de">bb@suse.de</A><BR> 
<A HREF="http://www.suse.de/">http://www.suse.de</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
The Linux Resource Kit
</H3>
<P> 
The <A HREF="http://www.secretagent.com/">Linux Resource Kit</A> has been
expanded to included current news and information on:
<ul>
<li>Web Servers
<li>Groupware
<li>Networking/Routing/WAN
<li>Client/Server Database
<li>Microsoft/Novell/Apple/NFS file and Print sharing
<li>System Administration
</ul>
For more information: <BR> 
Joe Royall, <A HREF="mailto:joe@secretagent.com">joe@secretagent.com</A>

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
IACT & Linux users
</H3>
<P> 
A message from the Land of Beyond web site!
<P> 
We have devoted a new section for  IACT,  the  "International  Alliance
for
Compatible  Technology."  Users  of  major  platforms  such  as OS/2,
Linux,
FreeBSD, BeOS, MacOS,  Unix,  DOS  etc.,  are  invited  to sign-on to
IACT's
Declaration! IACT is working for greater freedom of choice in software,
for
better  access  to  computer-based  services  &  technology,  and  for
open
standards,  including  higher  standards  of  compatibility. To achieve
such
important goals for  all  people,  IACT  will  join in anti-monopoly
efforts
against Micro$oft, while we find positive ways to  help  consumers  &
users
regardless of their chosen platforms. Join us at...
<A HREF="http://pages.cthome.net/iact/">
http://pages.cthome.net/iact/</A> 

<P> 
For more information: <BR> 
Diane Gartner, <A HREF="mailto:dgwhiz@earthling.net">dgwhiz@earthling.net</A><BR> 
IACT Co-ordinator<BR> 

<P> <HR> <P>
<a name="software"></a>
<!-- =================================================================== -->
<center><H3> Software Announcements </H3></center>

<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Dotfile Generator 2.2
</H3> 
<P> 
Date: December 24, 1997
<P>
Jesper Pedersen has announced the release of The Dotfile Generator version
2.2.
New in this release is:
<ul>
<li>Added the ipfwadm module for configuring IP Firewalling,
Forwarding and Masquerading. 
<li>Added the procmail modules for configuring mail filters. 
<li>The menu system, from which one select the configuration
pages has been rewritten, so it's now much more intuitive. 
<li>Some bugs have been fixed.
<li>Made it work with Tcl/Tk 8.0, which is much faster than
the older versions of Tcl/Tk
</ul>
The source is available from the home site of TDG:
<A HREF="ftp://ftp.imada.ou.dk/pub/dotfile/dotfile.tar.gz">
ftp://ftp.imada.ou.dk/pub/dotfile/dotfile.tar.gz</A> 
<P> 
For more information: <BR> 
Jesper Pedersen, <A HREF="mailto:blackie@imada.ou.dk">blackie@imada.ou.dk</A>
 
<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
TeamWave Workplace 2.1
</H3> 
<P> 
Date: November 27, 1997
<P>
TeamWave Software Ltd. today
announced the release of version 2.1 of TeamWave Workplace, its popular
software that lets teams work together in shared electronic rooms
across the Internet.
For teams within an organization who are sometimes physically separated
yet still need to work closely together, TeamWave Workplace provides
an Internet forum where teams collaborate, communicate and share
information.
<P> 
For more information: <BR> 
<A HREF="mailto:info@teamwave.com">info@teamwave.com</A><BR> 
<A HREF="http://www.teamwave.com/">http://www.teamwave.com/</A> 

<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Red Hat Linux 5.0, HURRICANE
</H3>
<P> 
Date: December 1, 1997
<P> 
Red Hat Software, Inc. has announced the
availability of Red Hat Linux release 5.0 for Intel and Alpha
computers.  This release is a major update to the Red Hat Linux 4.X
series.
Red Hat Linux is available on their FTP site:<BR> 
<A HREF="ftp://ftp.redhat.com/pub/redhat/redhat-5.0/">
ftp://ftp.redhat.com/pub/redhat/redhat-5.0/</A> 
<P> 
For more information: <BR> 
<A HREF="http://www.redhat.com/">http://www.redhat.com/</A> <BR>  
<A HREF="mailto:info@redhat.com">info@redhat.com</A> 

<P> <hr> <P> 
<!-- =================================================================== -->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Nighthawk
</H3> 
<P> 
Date: December 19, 1997
<P>
Nighthawk is An X-Windows game for Linux (Freeware GPL),
based on Andrew Braybrooks C-64 classic- "Paradroid",
written by Jason Nunn (JsNO)

<P> 
Nighthawk 1.0 uploaded onto the following sites:
<ul>
<li><A HREF="http://www.downunder.net.au/~jsno/rel/1997/nighthawk-1.0.tgz">
http://www.downunder.net.au/~jsno/rel/1997/nighthawk-1.0.tgz</A>
<li>ftp://ftp.cdrom.com/pub/unixfreeware/incoming  (asked to be put into games)
<li>ftp://sunsite.unc.edu/pub/Linux/games/arcade  (uploaded to /incoming/Linux)
<li>ftp://ftp.funet.fi (uploaded to /pub/Linux/incoming)
</ul>
<P> 
For more information: <BR> 
Jason Nunn, <A HREF="mailto:jsno@dayworld.net.au">jsno@dayworld.net.au</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
C++ GUI IDE
</H3>
<P> 
Date: November 28, 1997
<P> 
Simple IDE for: Qt C++. GUI dialog editor, all developed on Linux X11R6
available at: <A HREF="http://qtez.commkey.net/">http://qtez.commkey.net/</A> 
All distributes of QtEZ include: documentation, a set of tutorials, and
many 
demonstration programs to illustrate features in the environment. I hope
QtEZ
is well received. 
<P> 
For more information: <BR> 
Sam Magnuson, <A
HREF="mailto:zachsman@commkey.net">zachsman@commkey.net</A>

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
r2d2 - easy but powerful boot-concept
</H3>
<P> 
Date: December 3, 1997
<P> 
  r2d2 is a newly developed boot-concept for Unix. In some
        way r2d2 combines the easeness of the BSD-style scripts
        (e.g. in Slackware Linux) with the power and flexibility
        of the traditional SysV scripts (e.g. in RedHat, Debian or
        S.u.S.E. Linux).
r2d2 is available at <A
HREF="ftp://sunsite.unc.edu/pub/Linux/system/daemons/init/">
ftp://sunsite.unc.edu/pub/Linux/system/daemons/init/</A> 
<P> 
For more information: <BR> 
Winfried Truemper, <A HREF="mailto:winni@xpilot.org">winni@xpilot.org</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
TkSTEP 8.0p2
</H3>
<P> 
Date: December 5, 1997
<P> 
This is Tk 8.0p2 with some modifications to make it look like N*XTSTEP's 
interface, plus some new widgets inspirated on N*XTSTEP and the ability
to utilize the full power (and more) of the OffiX Drag'n'Drop protocol.
<P> 
The programming aspects of Tk have not been changed much, so you can run 
your old Tk apps normally with it, although some options will not do 
anything (like -relief for scrollbars).
<P>
To get TkStep go to <A HREF="http://www.fga.de/~ograf/TkStep.shtml">
http://www.fga.de/~ograf/TkStep.shtml</A> 
<P> 
For more information: <BR> 
Oliver Graf, <A HREF="mailto:ograf@fa.de">ograf@fa.de</A> <BR> 
Steve Murray, <A HREF="mailto:stevem@eng.uts.edu.au">stevem@eng.uts.edu.au</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
t1lib-0.4-beta: A rasterizer for Adobe Type 1 Fonts
</H3>
<P> 
Date: December 5, 1997
<P> 
t1lib is a library for generating character- and string-glyphs from
Adobe Type 1 fonts under UNIX. t1lib uses most of the code of the X11
rasterizer donated by IBM to the X11-project. But some disadvantages
of the rasterizer being included in X11 have been eliminated.
<P> 
You can get t1lib by anonymous ftp at:
<A
HREF="ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/t1lib/t1lib-0.4-beta.tar.gz">
ftp://ftp.neuroinformatik.ruhr-uni-bochum.de/pub/software/t1lib/t1lib-0.4-beta.tar.gz </A> 
<P> 
For more information: <BR> 
Rainer Menzner, <A
HREF="mailto:Rainer.Menzner@neuroinformatik.ruhr-uni-bochum.de">
Rainer.Menzner@neuroinformatik.ruhr-uni-bochum.de</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
SGML-Tools 1.0.1
</H3>
<P> 
Date: December 5, 1997
<P> 
After a year of mostly code restructuring and bugfixing, the time finally 
arrived to let SGML-Tools 1.0 see the light. This means the final demise of 
Linuxdoc-SGML. Loads and loads of features were added. Most of the code was
redone in Perl 5, 
which adds a lot of flexibility for people who want to override
certain parts 
of the functionality (but at the same time be able to install newer
versions); 
uncountable bugs were fixed (more were introduced, of course :-)), lots of 
small enhancements, etc.
<P> 
Visit the SGML-Tools homepage, at <A
HREF="http://pobox.com/~cg/sgmltools/">http://pobox.com/~cg/sgmltools/</A>, for
latest 
news, pointers to locations, etcetera. Note that I haven't been able to get 
this stuff on SunSite yet, so you'd better go via the homepage.
<P> 
For more information: <BR> 
Cees de Groot, <A HREF="mailto:cg@pobox.com">cg@pobox.com</A> <BR> 
<A HREF="http://pobox.com/~cg/sgmltools/">http://pobox.com/~cg/sgmltools/</A> 


<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
LinuxThreads 0.7 -- POSIX thread library
</H3>
<P> 
Date: December 5, 1997
<P> 
LinuxThreads is a thread library for Linux implementing the POSIX
1003.1c API and based on the "one thread = one process" model.
The sources are available through the LinuxThreads home page:
<A HREF="http://pauillac.inria.fr/~xleroy/linuxthreads/">
http://pauillac.inria.fr/~xleroy/linuxthreads/</A> 
or directly on our FTP server:
<A HREF="ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy/linuxthreads.tar.gz">
ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy/linuxthreads.tar.gz</A> 
<P> 
For more information: <BR> 
Xavier Leroy, <A HREF="mailto:xavier.leroy@inria.fr">xavier.leroy@inria.fr</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
TkDesk 1.0b5 released
</H3>
<P> 
Date: December 9, 1997
<P> 

TkDesk 1.0b5, a Desktop and File Manager for UNIX's running X11, has been
released.
TkDesk is a graphical desktop and file manager for several brands
   of UNIX (such as Linux) and the X Window System.  It offers a very
   rich set of file operations and services, and gives the user the
   ability to configure most aspects of TkDesk in a powerful way.  The
   reason for this is the use of Tcl/Tk as the configuration and (for
   the biggest part of TkDesk) implementation language.
<P> 
You can get TkDesk from its homepage at:
<A HREF="http://people.mainz.netsurf.de/~bolik/tkdesk/">
http://people.mainz.netsurf.de/~bolik/tkdesk/</A>
<P> 
For more information: <BR> 
Christian Bolik, <A HREF="mailto:Christian.Bolik@mainz.netsurf.de">
Christian.Bolik@mainz.netsurf.de</A> 
 
<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
MP3Blaster V2.01 -- Mpeg audio player for Linux
</H3>
<P> 
Date: December 9, 1997

<P> 
A new release of MP3Blaster, an Mpeg-layer 1/2 audio
player for Linux is available. This player has a smart and intuitive user-interface that
allows a user to split up a playlist into sections. An interesting use of
this feature is that you can put about 10 of your audio CD's in MP3-format
on one CD-ROM and have each section in the playlist represent an album.
Then, you can have the player play the songs in every imaginable order you
want.
<P> 
Available at:<BR> 
<A
HREF="ftp://sunsite.unc.edu/pub/Linux/apps/sound/players/mp3blaster-2.0b1.tar.gz">
ftp://sunsite.unc.edu/pub/Linux/apps/sound/players/mp3blaster-2.0b1.tar.gz</A>
<BR> 
<A HREF="http://www.stack.nl/~brama/src/mp3blaster-2.0b1.tar.gz">
http://www.stack.nl/~brama/src/mp3blaster-2.0b1.tar.gz</A> 
<P> 
For more information: <BR> 
Bram Avontuur, <A HREF="mailto:brama@mud.stack.nl">brama@mud.stack.nl</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
X-CD-Roast 0.96c
</H3>
<P> 
Date: December 9, 1997
<P> 
X-CD-Roast 0.96c, a CD writer package for X, has been released.
Really new stuff:
<ul>
<li>based on Tcl/Tk 8.0
<li>includes cdrecord-1.5 and mkisofs 1.11.1
<li>lots of fixes.
</ul>
Check out the web page: <A HREF="http://www.fh-muenchen.de/rz/xcdroast/">
http://www.fh-muenchen.de/rz/xcdroast/</A> 

<P> 
For more information: <BR> 
Thomas Niederreiter, <A HREF="mailto:p7003ad@sunmail.lrz-muenchen.de">
p7003ad@sunmail.lrz-muenchen.de</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
ADABAS D Workgroup Edition
</H3>
<P> 
Date: December 11, 1997
<P> 
ADABAS D Workgroup Edition 10.0 for Linux is now available. Visit
<A HREF="http://www.IoS-online.de">http://www.IoS-online.de</A> 
<P> 
For more information: <BR> 
Bjoern Bayard, <A HREF="mailto:Bjoern.Bayard@ios-online.de">
Bjoern.Bayard@ios-online.de</A> 

<P> <HR> <P>
<!--===================================================================-->

<H3><IMG ALT=" "   SRC="../gx/bolt.gif">
Linbot 0.1 web site management tool
</H3>
<P> 
Date: December 12, 1997
<P> 
Linbot 0.1 is a tool that can examine a web site for broken links,
outdated pages, and other useful information.  It is based on the
commercial LinkBot from TetraNet Software (http://tetranetsoftware.com/)
though Linbot will be free.
You can get Linbot at <A HREF="http://home1.gte.net/marduk/linbot/index.html">
http://home1.gte.net/marduk/linbot/index.html</A> 
<P> 
For more information: <BR> 
Marduk, <A HREF="mailto:marduk@gte.net">marduk@gte.net</A> 


<P> <hr> <P> 
<!--================================================================-->
<center>Published in <I>Linux Gazette</I> Issue 24, January 1998</center>
<P> <HR> <P>
<!-- =================================================================== -->
<A HREF="./lg_toc24.html"><IMG SRC="../gx/indexnew.gif" ALT="[ TABLE OF 
CONTENTS ]"></A>
<A HREF="../index.html"><IMG SRC="../gx/homenew.gif" ALT="[ FRONT 
PAGE ]"></A> 
<A HREF="./lg_tips24.html"><IMG SRC="../gx/back2.gif" ALT=" Back "></A>
<A HREF="./lg_answer24.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>

<P><HR><P>
<h5>This page written and maintained by the Editor of <I>Linux Gazette</I>,
<A HREF="mailto: gazette@ssc.com">gazette@ssc.com</A><BR> 
Copyright &copy; 1998 Specialized Systems Consultants, Inc. </H5> 
<P> 
<H4>"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P> 

<!-- ===============================================================  -->
<center>
<H1><A NAME="answer">
<img src="../gx/ans.gif" alt="" border=0 align=middle>
The Answer Guy
<img src="../gx/ans.gif" alt="" border=0 align=middle>
</A></H1> <BR>
<H4>By James T. Dennis,
<a href="mailto:answerguy@ssc.com">answerguy@ssc.com</a><BR> 
Starshine Technical Services, <A HREF="http://www.starshine.org/">
http://www.starshine.org/</A> </H4> 
</center>

<p><HR><p>
<H3>Contents:</H3>
<ul>
<li><a HREF="./lg_answer24.html#net1">Netscape Mail Crashing</a>
<li><a HREF="./lg_answer24.html#slack">Slackware Help</a>
<li><a HREF="./lg_answer24.html#net2">Netscape /var/spool/USER </a>
<li><a HREF="./lg_answer24.html#virtual">Getting Rid of Virtual Screens</a>
<li><a HREF="./lg_answer24.html#diald">diald's niche</a>
<li><a HREF="./lg_answer24.html#redh1">Upgrade to Red Hat 5.0?</a>
<li><a HREF="./lg_answer24.html#redh2">Red Hat Linux and WABI and other things</a>
<li><a HREF="./lg_answer24.html#pdt">Linux as a PDT</a>
</ul>

<p><HR><p> 
<!--================================================================-->

<a name="net1"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
Netscape Mail Crashing 
</H3>
<P> <B> 
From: Jim Kelley, <A
HREF="mailto:the-jim@swbell.net">the-jim@swbell.net</A><BR>
</B> <P> <B> 
I've been running Netscape Communicator 4.04 on my RedHat Linux system
since the day it came out and yesterday it started crashing whenever I
check for new messeges or try to go to a newsgroup.  I've deleted NC4.04
and re-installed it but to no avail.
Any suggestions?
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	When you removed NC4.04 (which I didn't know had been released
	yet -- I'm still using 4.03) did you also remove your ~/.netscape
	directory tree?
<P>
	What happens if you try it from another account on the same 
	system? What happens if you use different e-mail and newsreaders?
	(elm, pine, emacs' mh-e and/or tin, nn, trn, or emacs' Gnus 
	for respective examples).
<P>
	I would suspect a data or configuration file corruption.  Many
	programming practices that I most loathe and detest have to do
	with a lack of robustness and simple error messages with regard
	to corrupted input.  Is it really that hard to have a switch 
	that logs each input source like:  "Reading configuration from
	~/.netscape/foorc....." and "Bounds error at ~/.netscape/bar.conf
	offset 0x2AFF9A77"?
	
	I haven't looked at the innards of NS Comm's data files -- I
	wouldn't use their mail and newsreaders since I'm very 
	particular about my mail and netnews -- and I need extensible,
	configurable, text mode capable systems (so I use emacs' mh-e and
	Gnus).
<P>
--Jim 
			   
<p><HR><p> 
<!--================================================================-->

<a name="slack"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
Slackware Help
</H3>
<P> <B> 
From: Ralph, <A HREF="mailto:RPMAXEDGE@aol.com">RPMAXEDGE@aol.com</A>
</B> <P> <B> 
HELP!!!!!!!!!!!!!<BR> 
Recently I installed Linux Slackware version 3.2, everything loaded fine, but
I really run into problems when I set up the password for the root, for some
reason the one i register doesn't allow me to log in.  I have problems on how
to mount the /root and remove the existing password from the /etc/shadow.  I
install linux with partitions for a SCSI hardrive sda1 sda2.
 I would really appreciate some few hints to solve this problem.. Thank YOU
VERY MUCH.                                            
</B> <P> <B> 
--Ralph
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	I haven't used any of the newer Slackware systems -- so I don't know
	if there's anything specific to their system that would contribute
	to or cause this problem.
<P>
	The general way to fix this sort of problem (lost root password) is
	to boot from a rescue diskette (or from an "alternate root partition")
	mount your normal root partition (let's you put it under /mnt/oldroot)
	and then simply edit the mnt/oldroot/etc/passwd file -- and maybe the
	corresponding shadow file).
<P>
	Another trick is to use the chroot command instead of editing the 
	passwd files directly.  Basically you can follow the mount with
	a command sequence like:
<PRE>
		cd /mnt/oldroot/ && usr/sbin/chroot . bin/sh 
</PRE>
	... and then:
<PRE>
		passwd 
</PRE>
	(allows you to use the normal passwd command -- and forces it to 
	update the passwd files *under* the (chroot)/etc directory rather
	than the one of the root diskette or the alternative root part).
<P>
	A properly maintained alternative root partition should have 
	extra copies (mirrors) of the whole /etc directory from your
	production root partition.  This makes recovery from errors
	*much* easier.  On some systems you may be able to use a
	removable drive (LS120, Zip, Jaz, magneto-optical, Bernouli,
	Syquest, DynaMO, whatever) as your alternative root system.
<P>
-- Jim

<p><HR><p> 
<!--================================================================-->

<a name="net2"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
Netscape /var/spool/USER 
</H3>
<P> <B> 
From: John Liebenrood, <A
HREF="mailto:k7ro@teleport.com">k7ro@teleport.com</A> 
</B> <P> <B> 
I'm running Redhat 4.2 with Netscape 3.01. I can
send mail fine but I can't receive mail.  I don't understand
how to configure my /var/spool/USER.  I've used chown mail.mail
and chmod 01777 on USER file. But still can't get mail to come
in...  
    all talk no listen
</B> <P> <B> 
--john
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	Do you have a POP account?  Are you trying to 
	read you mail from the localhost?  Where is your 
	localhost supposed to get it's mail from?
<P>
	Normally 'sendmail' (or smail, deliver, or procmail) 
	appends messages to your spool file.  'sendmail' gets
	your mail via SMTP or from your UUCP system (depending
	on your configuration and your ISP/account type).  
<P>
	There are a bunch of factors that anyone would need to
	know before answering your question.
<P>
	Netscape is normally configured to fetch mail via the
	POP protocol and to send it directly via SMTP.  If your
	system is already configured to send and recieve mail 
	(i.e. you can use other mail user agents (MUA's) like
	elm, pine, mh, etc) then you should be able to configure
	Netscape to use "localhost" (the loopback interface --
	internal to your own system).
<P>
	Personally I won't use NS Nav. (or Comm.) as a mail or
	news client.  I absolutely require a text mode interface
<P>
-- Jim

<p><HR><p> 
<!--================================================================-->

<a name="virtual"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
Getting Rid of Virtual Screen
</H3>
<P> <B> 
From: <A HREF="mailto:bmiles@intergate.bc.ca">bmiles@intergate.bc.ca</A>
</B> <P> <B> 
Hi, how do i get rid of the virtual screen under x windows, it's bloody
annoying!! I've tried disabling it under install and I've even tried
resetting my resolution size, please help!!!
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	Assuming you're using XFree86 you'd edit your XF86Config file
	(which might be /etc/X11/XF86Config or might be something more
	like /usr/X11R6/lib/.... or something).
<P>
	Find the Screen section for the device driver and mode you're
	using, look for the display subsection that applies you your
	monitor and modify the "Virtual" line thereunder.
<P>
	If you've tried that (if that's what you mean by "resetting my
	resolution" or "disabling it under install") than it's possible
	that you're using a different X Server than I think you are
	(Xig, or Metro-X or something) or that your installation or 
	distribution is using a config file in a different location
	than you think it is.
<P>
	The man pages for 'X', 'startx' and 'xinit' may help -- in 
	particular the XFree86 servers allow you to specify an option
	of -xf86config file -- which allows you to explicitly over-ride
	the system wide configuration (and is a great reason for 
	security concscious sysadmins to limit the execution of X to 
	some trusted local users -- and maybe use xdm).
<P>
	I found this option in XFree86(1) (that's the XFree86 man page
	in chapter one on my man pages).  Don't confuse it with the 
	-config option referred to in the XServer(1) man page.  That
	option just says that more *command-line options* are stored
	in a file.  The XServer man page refers to options and 
	configuration information that should apply to any Unix X
	Windows display server.  The XFree86(1) page refers to the
	extensions which apply to the servers written as part of the
	XFree86 project.  The various XF86_* man pages refer to the
	features that are specific to specific servers (that is the
	ones which are compiled for a given video card or chipset).
<P>
	You're only running one binary -- yet three man pages apply
	to whichever one you're using.  This is unnecessarily confusing
	-- and one of the books I've perused (on Unix, X, or Linux) 
	cover this sort of thing.  So you have to wander through lots
	of different man pages and /usr/doc/* files without a clear
	roadmap.
<P>
	I'm hoping that some future distribution (maybe the Red Hat
	5.0 that's supposed to be shipping in the next couple of 
	weeks, or the next Debian) will have a really good set of
	HTML (lynx clean!) documents, served by default off of the
	initial localhost webserver which takes a top down, organized
	approach to educating and informing us about all the power and
	choices we have in Linux.
<P>
-- Jim

<p><HR><p> 
<!--================================================================-->

<a name="diald"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
diald's Niche
</H3>
<P> <B> 
From: Pollywog, <A
HREF="mailto:caldera-users@rim.caldera.com">caldera-users@rim.caldera.com
</A> 
</B> <P> <B> 
Put it anywhere you'd like.  The .rpm version installs into defined
sub-directories, but keep the .rpm file anywhere you like.  I have
/usr/local/packages for tarballs and .rpms....
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	I recommend that SA's use a /usr/local/from directory
	tree.  You can then have a set of directories named
	after your favorite FTP and web sites and after the
	volume names of your favorite CD's.  
<P>
	When you download/fetch a file -- put it into a directory
	that reminds you where you got it from such as:
<P>
		/usr/local/from/sunsite/
		/usr/local/from/redhat/
		/usr/local/from/ftp.replay.com/
<P>
	... etc.
<P>
	Now when you want to upgrade a package you can see where
	you got the previous version from -- and consequently you
	have a headstart on where to look for upgrades.
<P>
	This technique is also handy if you read an alert about a
	compromised (trojan) package -- you can easily see where
	*you* got your copy from.
<P>
	For files you install off of the CD -- create a directory
	name that reminds of you which CD it is like:
<P>
		/usr/local/from/cd/MOP/		(Mother of Perl)
		/usr/local/from/cd/rharchive.fall97/
<P>
	... etc.
<P>
	Now you just put symlinks from that directory to your usual
	CD-ROM mount point (ln -s /mnt/cdrom/dir/foo  foo).
<P>
	This creates a tree of "broken" links -- but it tells you 
	where to find the source file if/when you need to rebuild.
<P>
	As you can probably see this technique is really a "poor
	man's HSM" (hierarchial storage management system).  You can
	also extend this idea to migrated data files from your home
	directories to removable media (such as Zip, Syquest, MO,
	and CDR devices).
<P>
	It's also a very handy form of self-documentation in businesses
	where you may have many sysadmins or you may have various 
	consultants "stomping" around on your systems.
<P>
-- Jim 

<p><HR><p> 
<!--================================================================-->

<a name="redh1"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
Upgrade to Red Hat 5.0? 
</H3>
<P> <B> 
From: Jason Welsh, <A HREF="mailto:jwelsh@mci.net">jwelsh@mci.net</A>
</B> <P> <B> 
hey, im running an older 4.something version of Red Hat and was
wondering if I just wanted to upgrade it to 5.0, do I need to
download certain RPMS or do I need to get the whole thing?
or get it on CD.. just curious if there was a shortcut I could 
take..
</B> <P> <B> 
--Jason.
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	I would get the CD (in fact I did -- but I haven't 
	run the upgrade yet -- want to finish some work and
	do an extra backup first).
<P>
	CD's save lots of bandwidth and save lots of time.
<P>
	If you don't need the commercial packages that come
	with Red Hat (the BRU and Metro-X) you can wait a 
	month or so for the "Archives" set to come out --
	which is about $20 (less than half the full version).
<P>
-- Jim

<p><HR><p> 
<!--================================================================-->

<a name="redh2"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
Red Hat Linux and WABI and other things
</H3>
<P> <B> 
From: <A
HREF="mailto: peter@trimatrix.net">peter@trimatrix.net</A> 
</B> <P> <B> 
I have RedHat Linux v5.0 (kernal 2.x) ($49) and (silly me)
found out that Caldera OpenLinux Standard ($399) supports
WABI for Windows 3.1 apps, FreeDOS (or is it DOSEMU??) for
DOS apps, and NetWare 3.x/4.x client supporting NDS (Network
Directory Services).
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	WABI/Linux (a.k.a the Windows 3.1 Applications Binary
	Interface) is available separately from Caldera.  It 
	is a commercial package -- and it should install on
	most Linux systems without much trouble.
<P>
	There's also WINE ("WINdows Emulation" or "WINE is not 
	Emulation" -- take your pick of acronym expansion).
	This is a freeware project to implement enough support
	for the lower level Windows API's to allow Linux (and 
	other Unix) users to install MS-Windows and run Windows 
	programs.
<P>
	I've heard that it is also possible to run Windows 3.1 
	in "standard mode" under DOSEMU/MS-DOS.  I'm not sure if
	that works under other DOS variants running under DOSEMU.
<P>
	OpenDOS is Caldera's release of "Novell DOS" (which
	was formerly "DR DOS" -- from Digital Research).  
	Caldera aquired the licenses and rights to Novell DOS
	when Novell decided to "refocus on its 'core' markets"
	(and practically gutted itself in the process).  In 
	fact Caldera's "Network Desktop" (their distribution that
	preceded the OpenLinux/Base and OpenLinux/Standard) was
	originally a research project at Novell.
<P>
	OpenDOS is partially commercial -- it is free for personal
	use (or for students, or something like that -- read their
	web pages for details).  It has little to do with DOSEMU.
	OpenDOS is available on CD for about $30(US).  
<P>
	DOSEMU is really a bit of a misnomer.  Technically it's
	a BIOS emulator which can be used to run any x86 "real mode"
	operating system (such as CP/M-86 or some versions of Forth).
	When you install DOSEMU you also have to install some copy of
	DOS (MS-DOS, PC-DOS, OpenDOS, whatever) to get any practical
	use out of it.  DOSEMU includes several DOS programs which
	connect to the underlying Linux system.  This allows one to 
	access Linux directories and NFS mounts as DOS "network" 
	drive letters, and do other things like that.
<P>
	FreeDOS is a different project -- you can learn more about 
	it at http://www.freedos.org.  They are quite Linux friendly
	-- but I haven't played with their release (and I've barely
	touched DOSEMU or Caldera's OpenDOS) so I can't say much about
	it.
<P>
	Regarding Netware access from Linux:
<P>
	Caldera's Netware client access (with bindery and NDS support)
	is only available as part of their OpenLinux Standard (as far as
	I know).  I've heard that some people have successfully installed
	the clients on other Linux distributions.  However it appears 
	that you are legally required to purchase the commercial 
	COL/Standard (Caldera OpenLinux is often called COL by participants
	of it's mailing lists).
<P>
	There are also a couple of free packages that implement some
	Netware protocols for Linux.  'ncpfs' is one that allows you 
	to 'mount' Netware partitions in a way that similar to NFS.
	This is a system-wide mount (unlike the Caldera netware clients
	where each user has unique "virtual" mountings that are not
	visible from other concurrent processes on the system.  
<P>
	There's also the mars_nwe (Netware emulator) that implements 
	a subset of the Netware fileserver protocols -- allowing DOS 
	and other systems to access portions of your Linux 
	filesystem(s) using the Netware clients (similar to 'samba' 
	for Windows for Workgroups/LANMan/NT functionality).
<P> <B>  
<img align=bottom alt=" " src="../gx/ques.gif">
I would like to know if this support can be added to RedHat
Linux by downloading this stuff from somewhere, and recompiling
the kernel?  Can you help?  I'm new to RedHat and have not 
yet gotten an answer from them.... If not, can you direct me
to where I can inquire? This is a quest to make use of our
486 computers at work (and just need to know) by running
Linux, and still support some things like Windows 3.1x Lotus Lotsuite,
etc., which Caldera claims to do, but I would like
to find out how much trouble it would be to add support to
Redhat.....
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	In general, anything you can run under Caldera you 
	can get to run under Red Hat or any other reasonably
	recent Linux distribution.
<P>
	Since Caldera, Red Hat, Craftworks, and a couple of 
	other Linux distributions use the same package 
	management system (the RPM -- or "Red Hat Package
	Manager") sharing packages among them is somewhat
	simpler than installing a Debian package or Slackware
	"tarball" would be.
<P>
	I'd look at any FTP mirror of Red Hat's "contrib" 
	directory for the lastest dosemu "rpm" and install
	that.  You'll probably find one of these on your set
	of Red Hat CD's in addition to the ones online.
	You can check the online directory for updates and
	recent additions.
<P>
-- Jim

<p><HR><p> 
<!--================================================================-->

<a name="pdt"></a>
<H3><img align=bottom alt=" " src="../gx/ques.gif">
Linux as a PDT 
</H3>
<P> <B> 
From: Karl Rossing, <A HREF="mailto:gtivr6@pangea.ca">gtivr6@pangea.ca</A> 
</B> <P> <B> 
Linux as a PDC (Primary Domain Controller), NIS/NIS+ Master -- etc.
</B> <P> <B> 
I was wondering if it is possble to get windows 95/NT to authenticate
to LINUX (using nis or nis+). I'm really getting tired of adding
accounts on the nt boxes for the linux boxes(for smb)...Is there any
commercial software availible? 
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	It sounds like you're asking fundamentally different 
	questions here.
<P>
	In your subject you refer to using Linux as a PDT
	by which I presume you meant a PDC (Primary Domain
	Controller).  Here you refer to using NIS/NIS+ --
	which would involve adding client support (third party
	software) to all of the NT/'95 boxes.
<P>
	A broader questions is:
<P>
		What network authentication and directory 
		services system/model/architecture should
		you use?
<P>
	This is a sticky question with no easy answer.  
<P>
	A simpler question is:
<P>
		How can I configure my MS client machines
		(NT and '95) to use my Linux system's 
		account information for access control and
		authentication?
<P>
<P>
	I'll provide some thoughts on each of these questions
	after commenting on the rest of your message:
<P> <B>  
<img align=bottom alt=" " src="../gx/ques.gif">
I know of p-sync [http://www.m-tech.ab.ca/psynch/index.html]
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	I glanced at their web pages and was not impressed.
	They have almost no text and are almost completely 
	unreadable for Lynx users.  They also don't offer
	any functionality in their demo -- which is just a 
	mockup of the GUI (crippleware).
<P> <B>  
<img align=bottom alt=" " src="../gx/ques.gif">
and NSGINA
[http://www.dcs.qmw.ac.uk/~williams/]
which seems a bit of work to setup...
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	That would "NISGINA"  This is by Nigel Williams -- apparently
	derived from work by Doug Scoular(*). It is apparently released
	under a BSD'ish license.  So this is much more promising than
	the p-sync package right off the bat.
<P>
	* (http://www.arch.usyd.edu.au/~doug/gina.html)
<P>
	GINA (graphical identification and authentication) is the 
	NT DLL that manage logins at the NT console -- there are 
	several different GINA's -- one from Novell for NDS, one 
	from MIT for Kerberos, another similar one for NT-AFS
	(Transarc's distributed filesystem -- which uses a 
	Kerberos 4 authentication model) etc.
	
	Here are some related URLS:
<P>
NT GINA related information:
http://web.mit.edu/cartel/ntgina.html
	-- very informative -- leads to all the rest that I found.
<P>
ND_GINA - An alternative authentication method for Windows NTr,
http://www.nd.edu/~dobbins/ntarch/nd_gina_doc.html
<P>
NT/UNIX Integration with Doug's GINA replacement,
http://www.arch.usyd.edu.au/~doug/gina.html
<P>
	The problem with GINA is that it doesn't appear to be
	available for '95 (or earlier versions of Windows or 
	DOS).  That may be a show stopper for for this approach
<P>
	I can't recommend in good faith that you upgrade
	you Win '95 systems to NT (since that just buys you 
	in further to this proprietary OS model -- and just 
	worsens your dilemma when '98 and NT 5.x ship).
<P> <B>  
<img align=bottom alt=" " src="../gx/ques.gif">
I'm not really looking for passwd syncronisation, i'd like to
consolidate it to the linux box, because the users use both linux/95/nt.
nuff said, thanks.
</B> <P> 
<img align=bottom alt=" " src="../gx/ans2.gif">
	I don't think nearly 'nuff's been said about this topic.
	There are a large number of directory service and 
	authentication methods that are vying for control of your
	network.  Each as its own security implications -- making
	them co-exist is difficult from the start, and a 
	constant drain on administrative time and resources -- and
	having them running concurrently usually means that the
	weakest link prevails in your security model.
<P>
	There's an excellent white paper about this at Cygnus
	Solutions:
<P>
		http://www.cygnus.com/product/unifying-security.html
<P>
	That aside, some of your choices are:
<ul>
<li>Microsoft's WINS (and its PDC/BDC domain model)
<li>Kerberos and Cygnus Kerbnet
<li>NIS/NIS+ 
<li>RADIUS/TACACS 
<li>LDAP (lightweight directory access protocol)
<li>Netware NDS, Banyan StreetTalk, etc.
<li>Host based security -- custom synchronization
<li>scripts.
</ul>
	So far I don't like any of them.  NIS/NIS+ is usually
	used with NFS.  Kerberos is the models that's used 
	in conjunction with AFS/DFS (and CODA if they ever
	finish it).  CIFS/SMB filesharing can be done with 
	very weak authentication (workgroups style) or with
	the WINS Microsoft model.
<P>
	Overall I think I'll like CODA best when we have a 
	reasonably Linux server and client for it.
<P>
	More more info on the CODA project at CMU browse 
	through their mailling list archives at:
<P>
		http://www.coda.cs.cmu.edu/maillists/linux-coda/0175.html
<P>
	I could rant for sometime about the security models of 
	the various network/shared filesystems -- but it's late
	so let it suffice to say I like that even less than the
	choices for DS and authentication.  So far I think I like
	TCFS (transparent cryptographic filesystem) the best for
	security -- though I'm quite concerned about its performance
	costs.
<P>
	I presume you're using Samba on your Linux server(s) to
	provide file services to your Windows clients.  From a 
	glance at the Samba Meta-FAQ and some of its other pages
	it looks like you could just let Linux/Samba manage the 
	accounts for your whole network.
<P>
	Here's some links that relate to that:
<P>
	Samba: User accounts
	http://samba.anu.edu.au/samba/docs/smb_serv/html/smb_se-4.html#ss4.1
<P>
	Samba Server HOWTO
	http://samba.anu.edu.au/samba/docs/smb_serv/html/smb_se.html
<P>
	(*Note: if I read this correctly -- Samba can't currently 
	 be a "password server."  This seems to mean that it can't
	 act as a PDC/BDC (backup domain controller) for NT systems
	 to refer client authentication requests through).
<P>
	It looks like the future will hold some sort of LDAP and
	Kerberos -- for NT and many other OS' and packages.  This 
	would be fine -- if it weren't for the inevitable politicking
	and kneebiting that the various commercial vendors are going
	to do.
<P>
	The problem is that everyone's version of LDAP (directory
	services) and Kerberos (authentication) will be just 
	different enough that each vendor's OS will just *need* to
	be *the* server for *their* domain.  They'll all make 
	press releases about their "interoperability" -- and most
	will refuse to release enough details about their "extensions"
	for any other vendor (or freeware programmers) to implement
	them elsewhere.
<P>
	I guess it will take a few years after the initial deployment
	for enough of this proprietary info to leak out (and/or be
	reverse engineered) to allow system administrators to actually
	have any semblance of a unified directory service and 
	authentication system.  The bugs and security problems will 
	probably keep popping up for a long time after that (they've
	been popping up in Unix for 27 years -- and many of them are
	reappearing in NT now).  
<P>
	Meanwhile we're going to see a continuing explosion of
	servers and network applications (client server systems)
	that each require different user account (with associated 
	group, token, and other information) and authentication 
	information.
<P>
	Worse yet, the various layers of management above us
	are already hearing the marketeers lies -- that the 
	solutions are "already shipping" or "just around the
	corner."  This is just what management wants to hear
	-- so many of them are believing it -- and planning their
	budgets and project schedules accordingly.   A system
	administration disaster in the making.
<P>
	Sorry I can't offer a brighter hope for the new year --
	but I'm no marketeer.   
<P>
-- Jim

<!--================================================================-->
<P> <HR> <P> 
<center><H5>Copyright &copy; 1998, James T. Dennis <BR> 
Published in Issue 24 of the Linux Gazette January 1998</H5></center>
<P> <HR> <P> 
<!--================================================================-->
<A HREF="./lg_toc24.html"><IMG SRC="../gx/indexnew.gif" ALT="[ TABLE OF 
CONTENTS ]"></A> <A HREF="../index.html"><IMG SRC="../gx/homenew.gif" 
ALT="[ FRONT PAGE ]"></A> 
<A HREF="lg_bytes24.html"><IMG SRC="../gx/back2.gif" ALT=" Back "></A>
<A HREF="./nielsen.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H1>Quick autofs Tutorial</H1>
<H4>By <a href="mailto:men2@auto.med.ohio-state.edu">Mark Nielsen</a></H4>
</center>
<P> <HR> <P>  

What is autofs? Autofs uses automount to mount cdrom and floppy drives 
(and other things) to your computer as you need them and umount as
they are not being used. What is mount and unmount? Mount and umount
are programs to mount a device ontop of a directory. For example, 
this command would mount the first floppy drive (drive a: in DOS terms)
to the directory "/mnt/floppy" so that everytime you access "/mnt/floppy" 
to access your floppy drive.
<p>
<pre>
mount /dev/fd0 /mnt/floppy
</pre>
<p>
And this command unmounts or frees up the floppy drive from being used.
<p>
<pre>    
umount /dev/fd0 
</pre>    

<p>
Now, in DOS terms, your floppy disk is accessed as you need it. For normal
users, that is what they would expect. They wouldn't want to use
mount and umount because it is time consuming and because they might not
get it right. 
<p>
I assume "/dev/cdrom" is your cdrom drive and "dev/fd0" is your
floppy drive. I am also assuming you will backup your "/etc/auto.master"
file. 
Use this script to create the following threes files and restart autofs.
 Login as "root", goto 
your home directory, copy whatever between
the next two lines to a file called "CreateAutofs.script" and execute 
the script with the command 
<pre> 
source CreateAutofs.script
</pre>

<HR> 
<pre>
cd
echo "Please ignore any errors when making directories"
     ### Let us make sure the two directories exist, ignore errors
mkdir /mnt/floppy
mkdir /mnt/cdrom
     ### Let us backup the auto files in case they haven't
mv /etc/auto.master /etc/auto.master_old
mv /etc/auto.floppy /etc/auto.floppy_old
mv /etc/auto.cdrom /etc/auto.cdrom_old
     ### Create the files for autofs
echo "/mnt/cdrom /etc/auto.cdrom --timeout 10" > /etc/auto.master
echo "/mnt/floppy /etc/auto.floppy --timeout 1" >> /etc/auto.master
echo "floppy   -user,suid,fstype=msdos :/dev/fd0" > /etc/auto.floppy
echo "cdrom    -fstype=iso9660,ro   :/dev/cdrom" > /etc/auto.cdrom
     ### Create the links to the floppy drive and cdrom drive
ln -s /mnt/floppy/floppy a:
ln -s /mnt/cdrom/cdrom d:
ln -s /mnt/floppy/floppy floppy
ln -s /mnt/cdrom/cdrom cdrom 
     ### Lets retstart autofs, you might have to reboot
cd /etc/rc.d/init.d
./autofs restart
     ### If it didn't work, you might have to reboot 
     ### Try "./autofs start" if the restart claims autofs has not been
     #### started
cd

</pre>
<HR> 

<p>
The end of your results should look something like the following if it
was sucessfull
<pre>
Start /usr/sbin/automount --timeout 10 /mnt/cdrom file /etc/auto.cdrom
Start /usr/sbin/automount --timeout 1 /mnt/floppy file /etc/auto.floppy
</pre>

Now put a floppy disk formatted for MSDOS and a cdrom in and execute the
commands 
<pre>
ls a:
ls d:
</pre>
to see if there is anything on them. Hopefully you don't get any error
messages. 

<p>
Personally, my /etc/auto.floppy file looks like 
<pre>
floppy          -fstype=auto,defaults,user,suid :/dev/fd0
</pre>
and my /etc/auto.cdrom file look like this
<pre>
cdrom           -fstype=iso9660,user,suid       :/dev/cdrom
</pre>

The reason why I gave conservative values in the script was the fact the
my values might be security hazards. But since I am the only person
using my computer, I wanted to make sure my personal account had full
access to the floppy and cdrom drives. Also, -fstype=auto doesn't seem
to work quite right when your disk is formated for MSDOS, but works
fine with ext2. "-fstype=auto" tries to autodetect the file format. 

<p>
If you noticed the timeout value for the floppy drive is 1 second. 
This makes it so that by the time the floppy drive light has gone out, 
your floppy disk is unmounted and  a normal user 
can take the floppy
disk out and "nothing bad happens". I made the timeout value for the cdrom
10 seconds because it wasn't working really well at 1 second, and I
figured it was because the drive didn't have enough time to "warm up"
before it was being shut down. You might want to test what the timeout
value for your cdrom drive should be. 

<p>
To get more information about autofs, do the commands
<pre>
man 5 autofs
man autofs
</pre>
and look the the directory "usr/doc" for the directory "autofs-0.3.14"
or something similar to it. 

<h2> Now to explain it </h2>
Okay, here is my brief explanation for what is happening. Read the man
pages and any docs first.

<p>
Your "/etc/rc.d/init.d/autofs" script first looks at "/etc/auto.master".
That file usually has three things on each line. It has
the directory which all mounts will be located at. Then next to that value
is the filename which contains the configuration(s) for what devices you
want mounted. We will call these filenames the "supplemental" files. Next
to that value is the timeout which you want to
occur after so many seconds of inactivity. The timeout will free or umount
all devices specificed in the supplemental files after so many seconds of
inactivity. 
<p>
Now, the supplemental files can have more than on entry, but for my
purposes I don't do that. Read below for the explanation. The supplemental
files can be named anything you want them to be named. They also have
three values for each entry. The first value is the "psuedo" directory. I
will explain this later. The second value contains the
mount options. The third value is the device (like "/dev/fd0" which
is the floppy drive) which the "psuedo" directory
is connected to.
<p>
The "pseudo" directory is contained in the directory which is defined
in "/etc/auto.master". When people try to access this "psuedo" directory,
they will be rerouted to the device you specified. For example, the above
script will generate a link called "a:" which if you list with the
command "ls a:" will give you a list of files in the floppy drive. Or, a
similar command would be "ls /mnt/floppy/floppy". But if you do the
command "ls /mnt/floppy", you don't see anything even though the directory
"/mnt/floppy/floppy" should exist. That is because "/mnt/floppy/floppy"
doesn't exist as a file or directory, but somehow the system knows that
if you specifically ask for "/mnt/floppy/floppy", it will reroute you
to the floppy drive. 
<p>
Now as to the reason why I didn't combine the floppy drive and cdrom drive
into the same supplementary file. Each definition in the
"/etc/auto.master" file will have its own "automount" program running for
it. If you have several devices running on the same automount program and
one of them fails, it could force the others not to work. That is why
I want every device running on its own automount program which means
there is one device per supplementary file per entry in the
"/etc/auto.master" file.   

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Mark Nielsen <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./lg_answer24.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./jaeggli.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>Buying A Laptop</H2>
<H4>By <a href="mailto:joelja@darkwing.uoregon.edu">Joel Jaeggli</a></H4>
</center>
<P> <HR> <P>  
Having just read Micheal Shappe's review of the Fujitsu Lifebook 420d in
the Nov issue of LJ I thought I would relate a similar experience I had in
purchasing a new laptop for my organization. Academic User Services at the
University of Oregon provides support for end users on timeshare systems
running Digital Unix, VMS, Solaris, and Linux. We have a wide variety of
desktop hardware including PC's running Linux, FreeBSD, NT, 95 as well as
DEC Alphas, Sparcs, SGIs and Macs. We needed a portable computer to send
with people to do workshops, attend conferences and demo software for
people. Because our members use a number of varieties of Unix but only a
little better than half of them use Windows in the course of their work,
solid UNIX support of some variety was imperative.
<P>
Our requirements were that it should have sufficient space to dual boot
Windows95 and Linux, more over all the subsystems should work equally well
under either Windows or Linux. The Laptop needed to provide support for an
external display at 24-bit color depth as well as have support for an
external keyboard and mouse. It should above all meet those goals and be
relatively inexpensive as well as reasonably compact and durable.
<P>
We eventually settled on a Toshiba Satellite Pro 220cds. The Toshiba has a
complete compliment of ports on the back, PS/2, serial, parallel, IRDA,
VGA, docking station and interestingly enough, a USB port. It comes with a
Pentium 133 processor, 16mb of ram and 2mb of dram to drive the 12.1"
passive matrix display at 8, 16 and 24 bit color. It has a small but
sufficient 1.4gb disk. The audio jacks and the volume control are located
on the front of the case. The satellite pro 220cds is over all similar to
it's more expensive cousins the 440cds and the 460cds which will
undoubtedly replace it eventually. They are distinguished by having active
matrix displays, larger hard disks and in the case of the 460 an internal
modem.
<P>
The keyboard is quite large, the feel is closer if anything to a desktop
keyboard than anything that you would expect to find on a laptop except
for the travel of the keys which is fairly short. The Toshiba laptops have
a ThinkPad style trackpoint-pointing device rather than the ubiquitous
trackpads that seem to be on almost all portables these days. It does not
regrettably have a third mouse button like the new and very expensive
ThinkPad 770; but the buttons are located on top of each other rather than
adjacent to each other as on most trackpads. This makes them easier to
press and hold down with your thumb while moving the trackpoint with you
index finger, so you can drag a scrollbar in X for example without using
two hands.
<P>
Once I got over the fact that windows95 osr2 uses a fat/32 filesystem
which cannot be modified by fips, I used partition magic, a utility by
Powerquest to resize the windows95 partition  I was able to install Redhat
4.2 without trouble. The alternative would have been to repartition the
disk by hand using fdisk and then reinstall Windows off of the supplied
CD-ROM. I choose to partition the disk 800MB for Windows and 600MB for
Linux since I needed to install some large Windows applications such as
Adobe Frame and Microsoft Office. Rather than have separate var / and home
filesystems I opted for a single large Linux partition. A 64MB slice
reserved for swap, this made sense since I didn't expect var to grow too
much. The computer wouldn't be serving to much and that everyone using the
portable under Linux would be logging in as the same user.
<P>
The Toshiba 220cds uses a Chips and Technologies 65555 chipset for the
video display. While AcceleratedX and MetroX support this chipset it is
also well supported by XFree86's SVGA X server. If you choose to run the
free server you can expect to get 640x480 or 800x600 on the internal
display at 8 16 or 24 bits per pixels. Because it has 2MB of video memory
you can drive an external monitor at up to 1280x1024 in 8-bit color.
<P>
Networking was actually easier to configure under Linux than it was in
windows. The 3com Elink 3 ethernet card and megahertz 33.6 PC-card modem
that we purchased were detected by Redhat's install disks which was
fortunate because I installed Redhat 4.2 via NFS using the network card.
Because It is a portable I haven't configured it with a static-ip, rather
I DHCP the portable under both Windows and Redhat which facilitates
dragging it back and forth between subnets on our campus a great deal. The
python based Redhat network control panel is particularly well suited to
adjusting your network configuration on the fly. 
<P>
Configuring sound support turned out to be a pretty interesting exercise.
I chose to use the commercial OSS-Linux sound driver to support the Yamaha
olp3-sa chipset that the portable has. OSS-Linux could not auto detect the
settings of the sound chipset as it had done with my desktop Linux
machine. It worked fairly well once I figured out which irq's and memory
addresses were in use by the sound chipset, which was pretty easy using
the windows95 system control panel.
<P>
 The Toshiba 220cds is not by the standards of the current high-flyer in
the laptop world an exceptionally fast machine, It is however full
featured and even given all the accessories that we added extremely cheap.
The laptop itself can be had for as little as $1600. The cost of a 3com
network card and a Megahertz modem were $120 and $220 dollars
respectively. A spare lithium-ion battery an additional $199 and an
additional 16MB of ram was $90. In all the fully configured laptop cost
less than $2300.
<P>
I have been very happy with how well the new laptop has worked out. It is
a compact and elegant package, which is similar in function and design if
not performance to the cream of the Toshiba notebook crop such as the
Tecra 740. The moderate sacrifice in performance results in a great
machine at a fraction of the cost. I would recommend such a device to
anyone looking in to run Linux on a laptop. 

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Joel Jaeggli<BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./nielsen.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./bavendiek.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>Copying Files Using Mirror</H2>
<H4>By <a href="mailto:bav@rw.sni.de">Gerd Bavendiek </a></H4>
</center>
<P> <HR> <P>  

      Do you have a laptop ? And want frequently to copy files to another
    system ? Use mirror !
<P> 
      I frequently have to exchange files between my laptop and other
      systems, eg. my home desktop. This can be conveniently done
      using <code>rdist(1)</code>. 
      <p>
	I wrote a small script called <code>mirror</code>, which
	basically contains a call of rdist setting up a small
	<code>Distfile</code> using the shell's here syntax:
<pre>
rdist  -d PWD=`pwd` -f - &lt;&lt; EOF
${PWD} -> mirror
	install -oyounger ${PWD};
        except_pat ( ~\\$ );
EOF
</pre>
      <p>
	This is not the place to deal with <code>rdist</code>-syntax
	in greater detail, so see <code>rdist</code>'s-manpage, if you
	like. Files will be copied to host <code>mirror</code>. Of
	course you have to set up <code>/etc/hosts</code>
	appropiately.
      <p>
	So working on a project with files in <code>~/wsp/pbd/os-tools</code>,
	I can simply say
<pre>
nana:/home/bav/wsp/pbd/os-tools> mirror
mirror: updating host mirror
mirror: /home/bav/wsp/pbd/os-tools/main-window.tcl: updating
mirror: /home/bav/wsp/pbd/os-tools/os-tools.tcl: updating
mirror: /home/bav/wsp/pbd/os-tools/popups.tcl: updating
mirror: updating of mirror finished
</pre>

	and <code>mirror</code> will copy new or changed files to the very same directory on
	the other node. This will be done recursively. Files on the
	other node, which are younger than the files on the node I
	started <code>mirror</code> on, will be mentioned, but remain
	untouched. Emacs-backup-files will not be copied.
      <p>
	Using the Option <code>-verify</code>, you can check what will be done
	without really doing anything:
<pre>
nana:/home/bav/wsp/pbd/os-tools> mirror -verify
mirror: updating host mirror
mirror: /home/bav/wsp/pbd/os-tools/os-tools.tcl: need to update
mirror: /home/bav/wsp/pbd/os-tools/popups.tcl: need to update
mirror: updating of mirror finished
</pre>
      <p>	
	The option <code>-f</code> will remove extraneous files on node
	<code>mirror</code>. This is useful to get a real mirror:
<pre>
nana:/home/bav/wsp/pbd/os-tools> mirror -f
mirror: updating host mirror
mirror: lulu: /home/bav/wsp/pbd/os-tools/qqq: removed
mirror: lulu: /home/bav/wsp/pbd/os-tools/otto: removed
mirror: /home/bav/wsp/pbd/os-tools/main-window.tcl: updating
mirror: /home/bav/wsp/pbd/os-tools/popups.tcl: updating
mirror: updating of mirror finished
</pre>
      <p>
	Besides mirroring to another system's disk <code>mirror</code>
	can be used to mirror the current directory to a floppy. This
	comes in handy for a quick kind of backup. There is no real
	advantage of using <code>rdist</code> when operating locally.
      <p>
	If there is enough space available, I use cp with the options
	<code>-ruvp</code>. To do so, call <code>mirror</code> with the option
	<code>-floppy</code>:
<pre>
nana:/home/bav/wsp/pbd/os-tools> mirror -floppy
./main-window.tcl -> /floppy/./main-window.tcl
./os-tools.tcl -> /floppy/./os-tools.tcl
./popups.tcl -> /floppy/./popups.tcl
</pre>
      As with rdist, only new or changed files are copied. Mounting
      and unmounting the floppy is done by the script. Right now
      there is no way of handling  extraneous files implemented.
      <p>
	In case you like this ideas, you can 
	<a href="./mirror.script">find my mirror-utility here</a>.
      <hr>
      <address><a href="mailto:bav@rw.sni.de">Gerd Bavendiek</a></address>
<!-- Created: Thu Sep 24 20:02:14 MET DST 1997 -->
<!-- hhmts start -->
Last modified: Thu Sep 24 22:24:59 MET DST 
<!-- hhmts end -->

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Gerd Bavendiek <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./jaeggli.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./Article3e.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<IMG SRC="./gx/balsa/prev.gif" ALT="Previous">
<A HREF="./Article3e-1.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<IMG SRC="./gx/balsa/toc.gif" ALT="Contents">
<HR>
<center>
<H1>Linux Benchmarking: Part III -- Interpreting Benchmark Results</H1>

<H4>by Andr&eacute; D. Balsa (writer/coordinator), 
<A HREF="mailto:andrewbalsa@usa.net">andrewbalsa@usa.net </A></H4>v0.82, 31 December 1997
</center>
<P><HR><EM>This is the third article in a series of articles on Linux Benchmarking, to be published by the Linux Gazette. The first two articles showed how to successfully run synthetic or application benchmarks to produce accurate, significant and relevant data. The present article deals with the correct interpretation of this data, and it also presents nbench-byte 2.1, a modern CPU benchmark suite.</EM><HR></P>
<P>
<H2><A NAME="toc1">1.</A> <A HREF="Article3e-1.html">Contributors </A></H2>

<P>
<H2><A NAME="toc2">2.</A> <A HREF="Article3e-2.html">Benchmarking vs. benchmarketing</A></H2>
<UL>
<LI><A HREF="Article3e-2.html#ss2.1">2.1 The scientific/quantitative approach</A>
<LI><A HREF="Article3e-2.html#ss2.2">2.2 The benchmarketing approach</A>
</UL>

<P>
<H2><A NAME="toc3">3.</A> <A HREF="Article3e-3.html">Benchmarks for SMP systems</A></H2>
<UL>
<LI><A HREF="Article3e-3.html#ss3.1">3.1 Description of the problem</A>
<LI><A HREF="Article3e-3.html#ss3.2">3.2 Runtime issues</A>
<LI><A HREF="Article3e-3.html#ss3.3">3.3 Scheduling issues</A>
<LI><A HREF="Article3e-3.html#ss3.4">3.4 Further reading/links</A>
<LI><A HREF="Article3e-3.html#ss3.5">3.5 Benchmark availability</A>
</UL>

<P>
<H2><A NAME="toc4">4.</A> <A HREF="Article3e-4.html">GNU/Linux specifics</A></H2>

<P>
<H2><A NAME="toc5">5.</A> <A HREF="Article3e-5.html">An example of correct/incorrect interpretation of results</A></H2>
<UL>
<LI><A HREF="Article3e-5.html#ss5.1">5.1 Example</A>
<LI><A HREF="Article3e-5.html#ss5.2">5.2 Pitfalls</A>
</UL>

<P>
<H2><A NAME="toc6">6.</A> <A HREF="Article3e-6.html">In the next article</A></H2>

<P>
<H2><A NAME="toc7">7.</A> <A HREF="Article3e-7.html">Notes</A></H2>


<HR>
<IMG SRC="./gx/balsa/prev.gif" ALT="Previous">
<A HREF="./Article3e-1.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<IMG SRC="./gx/balsa/toc.gif" ALT="Contents">

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Andr&eacute; D. Balsa<BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./bavendiek.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./smith.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 
<IMG SRC="./gx/balsa/prev.gif" ALT="Previous">
<A HREF="./Article3e-2.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc1"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<HR>
<H2><A NAME="s1">1. Contributors </A></H2>


<P>Without the help of the following gentlemen, this article would not have been completed in time, would certainly be much shorter and would probably be filled with errors. In no particular order:
<UL>
<LI>Uwe F. Mayer, 
<A HREF="mailto:mayer@tux.org">mayer@tux.org </A>(nbench-byte and general contributions/revision),</LI>
<LI>Andy Kahn, 
<A HREF="mailto:kahn@zk3.dec.com">kahn@zk3.dec.com </A>(SMP Linux kernel 2.0.0 compilation benchmark idea, updates and results),</LI>
<LI>Joseph Yao, 
<A HREF="mailto:jsdy@tux.org">jsdy@tux.org </A>(comments and contributions),</LI>
<LI>Franois Laagel, 
<A HREF="mailto:f.laagel@ieee.fr">f.laagel@ieee.fr </A>(researched and contributed most of the SMP section), and</LI>
<LI>David Niemi, 
<A HREF="mailto:niemi@tux.org">niemi@tux.org </A>(comments and contributions).</LI>
</UL>
</P>
<HR>
<IMG SRC="./gx/balsa/prev.gif" ALT="Previous">
<A HREF="./Article3e-2.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc1"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>

<P><A HREF="./Article3e-1.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e-3.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e.html#toc2"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents" HEIGHT=16 WIDTH=16></A>

<HR></P>

<H2><A NAME="s2"></A>2. Benchmarking vs. benchmarketing</H2>

<P>There are two basic approaches to benchmarking in the field of computing:
the &quot;scientific&quot; or quantitative approach and the &quot;benchmarketing&quot;
approach. Both approaches use exactly the same tools, however with a slightly
different methodology and of course with widely diverging objectives and
results.</P>

<H2><A NAME="ss2.1"></A>2.1 The scientific/quantitative approach</H2>

<P>The first approach is to think of benchmarking as a tool for experimentation.
Benchmarking is a specific branch of Computer Science, since it produces
numbers which can then be mathematically processed and analyzed; this analysis
will be later used to draw relevant conclusions about CPU architectures,
compiler design, etc.</P>

<P>As with any scientific activity, experiments (benchmark runs and reporting)
must follow some basic guidelines or rules: </P>

<UL>
<LI>A good dose of modesty/humility (don't be too ambitious to begin with)
and common sense.</LI>

<LI>No bias or prejudice.</LI>

<LI>A clearly stated objective related to advancing the state-of-the-art.</LI>

<LI>Reproducibility.</LI>

<LI>Accuracy.</LI>

<LI>Relevance.</LI>

<LI>Correct logical/statistical inference.</LI>

<LI>Conciseness.</LI>

<LI>Sharing of information.</LI>

<LI>Quoting sources/references.</LI>
</UL>

<P>Of course, this is an idealized view of the scientific community, but
these are some of the basic rules for the experimental methods in all branches
of Science.</P>

<P>I should stress that benchmarking results in <B>documented quantitative
data</B>.</P>

<P>The correct procedure for GNU/Linux benchmarking under this approach
is: </P>

<OL>
<LI>Decide on what is the issue that is going to be investigated. <B>It
is very important to execute this step before anything else gets started</B>.
Stating clearly what we are going to investigate is getting half the work
done.</LI>

<LI>Also note that we are not out to prove anything: we must start with
a clean, <B>Zen-like mind</B>. This is particularly difficult for us, GNU/Linux
benchmarkers, since we are all <B>utterly convinced</B> that: </LI>

<OL>
<LI>GNU/Linux is the best OS in the universe (what &quot;best&quot; means
in this context is not clear, however; probably the same as &quot;coolest&quot;),</LI>

<LI>Wide-SCSI-3 is better than plain EIDE, (idem),</LI>

<LI><A HREF="http://www.digital.com/semiconductor/alpha/alpha-chips.html">Digital's
64-bit RISC Alpha </A>is the best platform around for GNU/Linux development
(idem), and</LI>

<LI>X Window is a good, modern GUI (no comments). </LI>
</OL>

<LI>After purifying our minds and souls ;-), we will have to select the
tools (i.e. the benchmarks) which will be used for our benchmarking experiments.
You can take a look at my previous article for a selection of GPLed benchmarks.
Another way to get the right tool for the job at hand is to devise and
implement your own benchmark. This approach takes a lot more time and energy,
and sometimes amounts to reinventing the wheel. Creativity being one of
the nicest features in the GNU/Linux world, writing a new benchmark is
recommended nonetheless, especially in the areas where such tools are sorely
missed (Graphics, 3D, multimedia, etc). <B>Summarizing, selecting the appropriate
tool for the job is very important</B>.</LI>

<LI>Now comes the painstaking part: gathering the data. This takes huge
amounts of patience and attention to details. See my two previous articles.</LI>

<LI>And finally we reach the stage of data analysis and logical inference,
based on the data we gathered/analyzed. This is also where one can spoil
everything by joining the Dark Side of the Force (see subsection 1.2 below).
Quoting Andrew Tanenbaum: &quot;Figures don't lie, but liars figure&quot;.</LI>

<LI>If relevant conclusions can be drawn, publishing them on the appropriate
mailing lists, newsgroups or on the <B><A HREF="http://www.linuxgazette.com">Linux
Gazette </A></B>is in order. Again this is very much a Zen attitude (known
as &quot;coming back to the village&quot;).</LI>

<LI>Just when you thought it was over and you could finally close the cabinet
of your CPU after having disassembled it more times than you could count,
you get a sympathetic email that mentions a small but fundamental flaw
in your entire benchmarking procedure. And you begin to understand that
benchmarking is an iterative process, much like self-improvement...</LI>
</OL>

<H2><A NAME="ss2.2"></A>2.2 The benchmarketing approach</H2>

<P>This second approach is more popular than the first one, as it serves
commercial purposes and gets more subsidies (i.e. grants, sponsorship,
money, cash, dinero, l'argent, $) than the first approach. Benchmarketing
has one basic objective, and that is to prove that equipment/software A
is better (faster, more powerful, better performing or with a better price/performance
ratio) than equipment/software B. The basic inspiration for this approach
is the Greek philosophical current known as Sophism. Sophistry has had
its adepts at all times and ages, but the Greeks made it into a veritable
art. Benchmarketers have continued this tradition with varying success
(also note that the first Sophists were lawyers <A HREF="Article3e-7.html#sophism">(1)</A>
see my comment on Intel below). Of course with this approach there is no
hope of spiritual redemption... Quoting Larry Wall (of Perl fame) as often
quoted by David Niemi:</P>

<P><I>&quot;Down that path lies madness. On the other hand the road to
Hell is paved with melting snowballs.&quot;</I></P>

<P>Benchmarketing results cover the entire range from outright lies to
subtle fallacies. Sometimes an excessive amount of data is involved, and
in other cases no quantitative data at all is provided; in both cases the
task of proving benchmarketing wrong is made more arduous.</P>

<H3>A short history of benchmarketing/CPU developments</H3>

<P>We already saw that the first widely used benchmark, Whetstone, originated
as the result of research into computer architecture and compiler design.
So the original Whetstone benchmark can be traced to the &quot;scientific
approach&quot;.</P>

<P>At the time Whestone was written, computers were indeed rare and very
expensive, and the fact that they executed tasks impossible for human beings
was enough to justify their purchase by large organizations. </P>

<P>Very soon competition changed this. Foremost among the early benchmarketers
was the need to justify the purchase of very expensive mainframes (at the
time called supercomputers; these early machines would not even match my
&lt; $900 AMD K6 box). This gave rise to a good number of now obsolete
benchmarks, as of course each different architecture needed a new algorithm
to justify its existence in commercial terms.</P>

<P>This <B>supercomputer market issue </B>is still not over, but two factors
contributed to its relative decline:</P>

<OL>
<LI>Jack Dongarra's effort to standardize the LINPACK benchmark as the
basic tool for supercomputer benchmarking. This was not entirely successful,
as specific &quot;optimizers&quot; were created to make LINPACK run faster
on some CPU architectures (note that unless you are trying to solve large
scientific problems involving matrix operations - the usual task assigned
to most supercomputers - LINPACK is not a good measure of the CPU performance
of your GNU/Linux box; anyway, you can find a version of LINPACK ported
to C in Al Aburto's excellent <A HREF="ftp://ftp.nosc.mil/pub/aburto">FTP
site</A>.</LI>

<LI>The appearance of very fast and cheap superminis, and later microprocessors,
and the widespread use of networking technologies. These changed the idea
of a centralized computing facility and signaled the end of the supercomputer
for most applications. Also modern supercomputers are built with arrays
of microprocessors nowadays (notably the latest Cray machines are built
using up to 2048 Alpha processors), so there was a shift in focus.</LI>
</OL>

<P>Next in line was the <B>workstation market </B>issue. A nice side-effect
of the various marketing initiatives on the part of some competitors (HP,
Sun, IBM, SGI among others) is that it spawned the development of various
Unix benchmarks that we can now use to benchmark our GNU/Linux boxes!</P>

<P>In parallel to the workstation market development, we saw fierce competition
develop in the <B>microprocessor market</B>, with each manufacturer touting
its architecture as the &quot;superior&quot; design. In terms of microprocessor
architecture an interesting development was the performance issue of CISC
against RISC designs. In market terms the dominating architecture is Intel's
x86 CISC design (c.f. Computer Architecture, a Quantitative Approach, Hennessy
and Patterson, 2nd. edition; there is an excellent 25-page appendix on
the x86 architecture). </P>

<P>Recently the demonstrably better-performing Alpha RISC architecture
was almost wiped out by Intel lawyers: as a settlement of a complex legal
battle over patent infringements, Intel bought Digital's microelectronics
operation (which also produced the StrongARM <A HREF="Article3e-7.html#arm">(2)
</A>and Digital's highly successful line of Ethernet chips). Note however
that Digital kept its Alpha design team and the settlement includes the
possibility by Digital to have present and future Alpha chips manufactured
by Intel.</P>

<P>The x86 market attracted <A HREF="http://www.intel.com">Intel </A>competitors
<A HREF="http://www.amd.com/products/cpg/cpg.html">AMD </A>and more recently
<A HREF="http://www.cyrix.com">Cyrix</A> which created original x86 designs.
AMD also bought a small startup called NexGen which designed the precursor
to the K6, and Cyrix had to grow under the umbrella of IBM and now <A HREF="http://www.national.com">National
Semiconductor</A> but that's another story altogether. Intel is still the
market leader since it has 90% of the microprocessor market, even though
both the AMD K6 and Cyrix 6x86MX architectures provide better Linux performance/MHz
than Intel's best effort to date, the Pentium II (except for floating-point
operations).</P>

<P>Lastly, we have the <B>OS market</B> issue. The <A HREF="http://www.microsoft.com">Microsoft
</A>Windows (R) line of OS's is the overwhelming market leader as far as
desktop applications are concerned, but in terms of performance/security/stability/flexibility
it sometimes does not compare well with other OSes. Of course, inter-OS
benchmarking is a risky business and OS designers are aware of that.</P>

<P>Besides, comparing GNU/Linux to other OSes using benchmarks is almost
always an exercise in futility: GNU/Linux is GPLed, whereas no other OS
can be said to be <I>free</I> (in the GNU/GPL sense). Can you compare something
that is <I>free</I> to something that is proprietary <A HREF="Article3e-7.html#freedom">(3)</A>
Does benchmarketing apply to something that is <I>free</I>?</P>

<P>Comparing GNU/Linux to other OSes is also a good way to start a nice
flame war on comp.os.linux.advocacy, specially when GNU/Linux is compared
to BSD Unices or Windows NT. Most debaters don't seem to realize that each
OS had different design objectives!</P>

<P>These debates usually reach a steady state when both sides are convinced
that they are &quot;right&quot; and that their opponents are &quot;wrong&quot;.
Sometimes benchmarking data is called in to prove or disprove an argument.
But even then we see that this has more to do with benchmarketing than
with benchmarking. My $0.02 of advice: <B>avoid such debates like the plague</B>.</P>

<H3>Turning benchmarking into benchmarketing</H3>

<P>The <A HREF="http://www.specbench.org">SPEC95 </A>CPU benchmark suite
(the CPU Integer and FP tests, which SPEC calls CINT95/CFP95) is an example
of a promising Jedi that succumbed to the Dark side of the Force ;-).</P>

<P>SPEC (<B>S</B>tandard <B>P</B>erformance <B>E</B>valuation <B>C</B>orporation)
originated as a non-profit corporation with the explicit objective of creating
a vendor-independent, objective, non-biased, industry-wide CPU benchmark
suite. Founding members were some universities and various CPU and systems
manufacturers, such as Intel, HP, Digital, IBM and Motorola.</P>

<P>However, some technical and philosophical issues have developed for
historical reasons that make SPEC95 inadequate for Linux benchmarking:
</P>

<OL>
<LI><B>Cost</B>. Strangely enough, SPEC95 benchmarks are free but you have
to pay for them: last time I checked, the CINT95/CFP95 cost was $600. The
quarterly newsletter was $550. These sums correspond to &quot;administrative
costs&quot;, according to SPEC.</LI>

<LI><B>Licensing</B>. SPEC benchmarks are not placed under GPL. In fact,
SPEC95 has a severely limiting license that makes it inadequate for GNU/Linux
users. The license is clearly geared to large corporations/organizations:
you almost need a full-time employee just to handle all the requisites
specified in the license, you cannot freely reproduce the sources, new
releases are every three years, etc...</LI>

<LI><B>Outright cheating</B>. Recently, a California Court ordered a major
microprocessor manufacturer to pay back $50 for each processor sold of
a given speed and model, because the manufacturer had distorted SPEC results
with a modified version of gcc, and used such results in its advertisements.
Benchmarketing seems to have backfired on this occasion.</LI>

<LI><B>Comparability</B>. Hennessy and Patterson (see reference above)
clearly identify the technical limitations of SPEC92. Basically these have
to do with each vendor optimizing benchmark runs for their specific purposes.
Even though SPEC95 was released as an update that would work around these
limitations, it does not (and cannot, in practical terms) satisfactorily
address this issue. Compiler flag issues in SPEC92 prompted SPEC to release
a 10-page document entitled &quot;SPEC Run and Reporting Rules for CPU95
Suites&quot;. It clearly shows how confident SPEC is that nobody will try
to circumvent specific CPU shortcomings with tailor-made compilers/optimizers!
Unfortunately, SPEC98 is likely to carry over these problems to the next
generation of CPU performance measurements.</LI>

<LI><B>Run time</B>. Last but not least, the SPEC95 benchmarks take about
2 days to run on the SPARC reference machine. Note that this in no way
makes them more accurate than other CPU benchmarks that run in &lt; 5 minutes
(e.g. nbench-byte, presented below)!</LI>
</OL>

<P>Summarizing, if you must absolutely compare CPU performance for different
configurations running GNU/Linux, SPEC95 is definitely <B>not</B> the recommended
benchmark. On the other hand it's a handy tool for benchmarketers.</P>

<P>
<HR><A HREF="./Article3e-1.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e-3.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e.html#toc2"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents" HEIGHT=16 WIDTH=16></A>
</P>

<P><A HREF="./Article3e-2.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e-4.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e.html#toc3"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents" HEIGHT=16 WIDTH=16></A>

<HR></P>

<H2><A NAME="s3"></A>3. Benchmarks for SMP systems</H2>

<H2><A NAME="ss3.1"></A>3.1 Description of the problem</H2>

<P>SMP (<B>S</B>ymmetric <B>M</B>ulti<B>P</B>rocessing) has been implemented
in the Linux kernel for Intel Pentium, Pentium MMX, Pentium Pro and Pentium
II processors <A HREF="Article3e-7.html#smp">(4) </A>and more recently
for SPARC architectures. SMP systems are usually more expensive than their
uniprocessor counterparts because they are frequently used to implement
heavy-duty (possibly fault-tolerant) servers. For this reason potential
buyers of such systems often want to make sure that applications, OS and
hardware platform will be able to satisfy their needs in terms of overall
performance before deciding on an expensive purchase. This is precisely
where a Linux SMP benchmark would be useful. As this series of articles
focuses on using current and stable 2.0.x kernels, we will only deal with
what could be done for benchmarking Linux SMP systems with current Linux
distributions.</P>

<P>Taking advantage of the additional computing power brought to the end-user
by an SMP hardware platform puts constraints on almost all layers of the
software involved: application, runtime libraries and operating system.</P>

<P>Basically two approaches are possible depending on how the application
being considered is designed: </P>

<OL>
<LI>The application uses multiple simultaneously running processes. Those
processes are very likely to communicate with each other using standard
IPC (Inter-Process Communications) mechanisms. </LI>

<LI>The application is multi-threaded: for some of the related processes,
multiple instances of sequential execution exist in the same address space.</LI>
</OL>

<P>The table below summarizes the impact of these two designs on the software
layers involved, on the programming complexity and on the expected performance
improvement (relatively to a comparable uniprocessor system):</P>

<CENTER><TABLE ALIGN=ABSCENTER BORDER=3 CELLSPACING=2 CELLPADDING=2 WIDTH="100%" >
<TR>
<TD><B>Application</B></TD>

<TD><B>Multiple single-threaded processes</B></TD>

<TD><B>Multi-threaded application</B></TD>
</TR>

<TR>
<TD>Runtime libraries special requirements</TD>

<TD>None.</TD>

<TD>Libraries must be thread safe and should preferably offer some POSIX
control over the threads.</TD>
</TR>

<TR>
<TD>Operating system special requirements: load balancing</TD>

<TD>Smart assignment of processes to processors must be implemented (static
or dynamic). </TD>

<TD>An assignment mechanism of kernel-threads to processors must be supported
</TD>
</TR>

<TR>
<TD>Example </TD>

<TD>make -j 4 vmlinux</TD>

<TD>None available AFAIK.</TD>
</TR>

<TR>
<TD>Additional programming complexity</TD>

<TD>None. </TD>

<TD>Greater than for single-hreaded applications, but it can be done by
us mere mortals. </TD>
</TR>

<TR>
<TD>Expected performance improvement </TD>

<TD>Average to poor. </TD>

<TD>High (close to linear speedup) for CPU bound applications but can also
degrade to become as low as single processor performance for system call
intensive applications.</TD>
</TR>
</TABLE></CENTER>

<P>How do those issues relate to current stable Linux kernels? </P>

<P>Good results obtained from a Linux multi-threaded benchmark would be
<I>very interesting for power users</I>.</P>

<H2><A NAME="ss3.2"></A>3.2 Runtime issues</H2>

<P>Threads can be implemented at the user-level as coroutines (e.g. the
LinuxThreads package), or can be kernel threads (i.e. threads running in
user mode but scheduled by the kernel). Until the very recent release of
Glibc 2.0 which RedHat 5.0 includes as its standard C library, finding
a thread safe runtime library could be a tough job.</P>

<H2><A NAME="ss3.3"></A>3.3 Scheduling issues</H2>

<P>The issue here is the way scheduling is implemented on SMP platforms
by the current stable kernels. Quoting its implementor Alan Cox (in a paper
he wrote in 1995):</P>

<P><I>&quot;A single lock is maintained across all processors. This lock
is required to access the kernel space. Any processor may hold it and once
it is held may also re-enter the kernel for interrupts and other services
whenever it likes until the lock is relinquished. This lock ensures that
a kernel mode process will not be pre-empted and ensures that blocking
interrupts in kernel mode behaves correctly. This is guaranteed because
only the processor holding the lock can be in kernel mode, only kernel
mode processes can disable interrupts and only the processor holding the
lock may handle an interrupt.&quot;</I></P>

<P>So a correct interpretation of this is: right now, no more than a single
process may be executing in kernel mode (i.e. executing a system call)
at any given time.</P>

<P>But efforts are underway to improve the granularity of locking in future
2.2.x kernels. We should also soon be able to take interrupts without having
to take a lock. This should result in much better performance of system
call intensive applications on SMP systems running GNU/Linux.</P>

<H2><A NAME="ss3.4"></A>3.4 Further reading/links</H2>

<OL>
<LI>&quot;An Implementation Of Multiprocessor Linux&quot;, Alan Cox, 1995.
I found this TeX article in the Linux source tree (kernel 2.0.33 source
in /Documentation/smp.tex).</LI>

<LI>A <A HREF="http://www.accessone.com/~jql/clone-faq.html">FAQ </A>about
the clone() Linux system call.</LI>

<LI>A clone() <A HREF="http://www.accessone.com/~jql/linus-example.html">utilization
example </A></LI>

<LI>LinuxThreads: a <A HREF="http://pauillac.inria.fr/~xleroy/linuxthreads/">package
</A>that implements user-level threads under Linux.</LI>
</OL>

<H2><A NAME="ss3.5"></A>3.5 Benchmark availability</H2>

<P>If we stick to our guideline for simple, quick running, readily available
benchmarks (or more simply, K.I.S.S. benchmarks), we can use a modified
version of the Linux kernel 2.0.0 compilation benchmark (described in article
II), now for SMP systems. Andy Kahn provided us with this test and some
very interesting results. Quoting directly from some email we exchanged
on this subject:</P>

<P><TT>&quot;...actually, it's pretty simple. GNU &quot;make&quot; has
an option you can specify to use multiple processes (either a default number
or a user specified number).I don't have the man page handy right now,
but i'm pretty sure it's either the -j option or the -p option (actually,
i think both options have some importance to multiple processes). Once
you specify multiple make processes, each process will have gcc compiling
something (so in effect, it's just multiple gcc processes).</TT></P>

<P>(later)</P>

<P><TT>&quot;Andre Derrick Balsa&quot; wrote:</TT></P>

<P><TT>-&gt; Great news :-)</TT></P>

<P><TT>-&gt;</TT></P>

<P><TT>-&gt; Thanks to Andy who actually tried this on a dual PPro SMP
system and</TT></P>

<P><TT>-&gt; explained the whole thing to me, I am pleased to announce
a version of</TT></P>

<P><TT>-&gt; the Linux 2.0.0 kernel compilation application benchmark for
SMP</TT></P>

<P><TT>-&gt; systems:</TT></P>

<P><TT>-&gt;</TT></P>

<P><TT>-&gt; Just replace the &quot;make vmlinux&quot; (was &quot;make
zImage&quot;) by &quot;make -j n</TT></P>

<P><TT>-&gt; vmlinux&quot;. Replace n by 2, 3 ... and make will launch
2, 3 ... processes</TT></P>

<P><TT>-&gt; in parallel. Since Linux SMP will transparently distribute
processes</TT></P>

<P><TT>-&gt; between the SMP processors, there is no need to program anything
special</TT></P>

<P><TT>-&gt; in terms of message-passing, clone(), etc...</TT></P>

<P><TT>-&gt;</TT></P>

<P><TT>-&gt; Andy doesn't have any exact figures available, but it seems
this would</TT></P>

<P><TT>-&gt; provide a 30% decrease in compilation time (over a single
serialized</TT></P>

<P><TT>-&gt; process). Thanks, Andy. :-)</TT></P>

<P><TT>-&gt; </TT></P>

<P><TT>and because I don't have any exact figures, I decided that I would
go and get some exact figures. :) </TT></P>

<P><TT>The system tested was:</TT></P>

<P><TT>Dual Pentium Pro 180MHz overclocked to 200MHz 64MB EDO RAM</TT></P>

<P><TT>Linux 2.0.27 gcc v2.7.2.1 libc v5.3.12</TT></P>

<P><TT>hda: QUANTUM TRB850A, 810MB w/96kB Cache, LBA, CHS=823/32/63 </TT></P>

<P><TT>This is more or less your &quot;standard&quot; PC from about 13-14
months ago. I'm not at liberty to upgrade the software on this system,
so this is as good as it gets from me with this setup.</TT></P>

<P><TT>Also, instead of doing a &quot;sync&quot; before issuing the final
&quot;make&quot; command, I propose that if the circumstances allow it
(you have root access), then umount the file system, remount it, then go
back to that directory and build the kernel.</TT></P>

<P><TT>--- THE RESULTS! ---</TT></P>

<P><TT>&quot;time make vmlinux&quot; 107.32user 149.01system 4:27.91elapsed
95%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (143472major+167951minor)pagefaults
0swaps</TT></P>

<P><TT>&quot;time make -j 2 vmlinux&quot; 131.13user 177.77system 3:28.34elapsed
148%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (169498major+168582minor)pagefaults
8903swaps</TT></P>

<P><TT>Ugh, the results are terrible (only a 22% improvement)!! Note that
in the SMP case, CPU usage was only 148%. From this, we can see that the
2nd CPU wasn't really used all that much (efficiently).&quot;</TT> </P>

<P>I really appreciated Andy's attitude: not only he improved on my previous
test procedure, but he went right ahead and produced some nice experimental
data to go with it! Plus one can feel how enthusiastic he was at doing
some hands-on experimentation!</P>

<P>Another nice feature of this simple SMP benchmark is that it provides
a basis for performance comparisons between uniprocessor and SMP GNU/Linux
systems.</P>

<P>Two more benchmarks would deserve a thorough description, but I will
just mention them here: </P>

<OL>
<LI><A HREF="http://www.tux.org/pub/people/david-niemi/bench/index.html">UnixBench
4.1</A> has some tests that will launch simultaneous processes.</LI>

<LI>A rather complex, but complete Unix benchmark suite developed in France,
called <A HREF="http://www.afuu.fr/">SSBA</A>. Fran&ccedil;ois is working
on a Linux port of the latest 2.4F revision.</LI>
</OL>

<P>
<HR><A HREF="./Article3e-2.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e-4.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next" HEIGHT=16 WIDTH=16></A>
<A HREF="./Article3e.html#toc3"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents" HEIGHT=16 WIDTH=16></A>
</P>

<A HREF="./Article3e-3.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<A HREF="./Article3e-5.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc4"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<HR>
<H2><A NAME="s4">4. GNU/Linux specifics</A></H2>


<P>One should be aware of some specific details when benchmarking GNU/Linux systems, as compared to benchmarking on other OS's. </P>
<P>GNU/Linux is a multitasking, multiuser system. So, obviously system load will skew results. On the other hand, this may be exactly the behavior that we want to test: how will a GNU/Linux system perform under heavy use? There is no simple answer to this question. Again, careful data gathering and analysis may reveal interesting opportunities for GNU/Linux improvement.</P>
<P>Note that system load particularly affects latencies, so one should be very careful about the conceptual differences between latency and throughput.</P>
<P>Just a short example, provided by Jeremy Chatfield (
<A HREF="http://www.xig.com"> Xi Graphics </A>: some X servers will freeze for various seconds under heavy load, resulting in mouse movements that can become quite jerky. This behavior is totally undesirable, and yet it is <B>not</B> measured by any X server benchmarking tool available.</P>
<P>Also, in a multiuser, multitasking system, the time function reports various items that must be analyzed separately: CPU time vs system time vs elapsed time (mentionned in article II). So, for a CPU benchmark, we should use CPU time, since the time spent during I/O or system functions is irrelevant. In the case of a system benchmark, it is probable that we will try to write a benchmark that spends most of its time in the kernel, so we will use system time. On the other hand, for our Linux kernel 2.0.0 compilation benchmark, we used elapsed time. There is no general rule to be followed here, one must use one's good sense.</P>
<P>Some caveats also apply to NFS benchmarks. The present Linux NFS implementation runs in user space, not in kernel space as in BSD Unices. Similarly, comparing the performance of Linux as a router against dedicated hardware would be an example of comparing Apples and Oranges. Even though Linux networking performance is very good, particularly with some DMA bus mastering Ethernet controllers/drivers, it cannot possibly be compared to dedicated routing hardware.</P>
<HR>
<A HREF="./Article3e-3.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<A HREF="./Article3e-5.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc4"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<A HREF="./Article3e-4.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<A HREF="./Article3e-6.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc5"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<HR>
<H2><A NAME="s5">5. An example of correct/incorrect interpretation of results</A></H2>


<P>We finally get to the practical part of this article. As usual, I propose a different benchmark as a practical example, only this time we will be seeing a more complex benchmark, in fact a CPU benchmark suite: we'll use the latest version of nbench-byte (version 2.1) as our example. You can download it from Uwe Mayer's 
<A HREF="http://www.tux.org/~mayer/">new Web site </A>or from the 
<A HREF="http://www.tux.org/bench">Linux Benchmarking Project</A></P>
<P>What we are going to measure this time can be described as "general CPU performance". So: this is not processor performance for matrix operations, this is not MMX performance, this is not the ability of a processor to decode an MPEG stream. Also, this is not a measure of a processor interrupt response time, peak MIPS, etc.
<OL>
<LI>Wrong ways to benchmark.</LI>
<LI>Wrong way to analyze benchmarking data measurements.</LI>
</OL>
</P>
<P>Now let's take a look at a correct procedure, following all the steps recommended in section 1.1</P>
<H2><A NAME="ss5.1">5.1 Example</A></H2>


<H3>Stating our objective</H3>


<P>For this short example we just want to compare the performance of two different CPUs: the AMD K6 and the Cyrix 6x86MX. This is comparative benchmarking, so we should keep all conditions fixed and vary just this single variable: the CPU.</P>
<P>This is not too ambitious and I have no bias for/against any of these two chips. Also, since both CPUs are widely available at reasonable prices, such comparative benchmarking may be of interest to GNU/Linux users wanting to upgrade and/or put together their next CPU.</P>
<H3>Choice of a benchmark</H3>


<P>Nbench-byte is an improved, updated version of the 
<A HREF="http://www.byte.com/bmark/bmark.htm"> BYTEmark benchmark suite </A>developed at BYTE magazine by Rick Grehan. Uwe F. Mayer did the port to Linux and is its present maintainer/developer. The latest version is 2.1, dated December 97.</P>
<P>Similarly to SPEC95, this modern CPU benchmark suite uses 10 different algorithms that are representative of common CPU-intensive tasks (the file bdoc.txt included with the source has a description of each algorithm). Note that Rick has stopped development of BYTEmark (neither Uwe nor myself managed to contact him), but you can see that this is not a committee-designed benchmark; in this respect its lineage fits quite well the GNU/Linux style of development.</P>
<P>Nbench-byte 2.1 also goes one step beyond SPEC95 in that it generates three index figures: an Integer Index, a Floating-Point Index and a Memory Index. The Memory Index reflects the fact that on most modern CPUs, the memory subsystem represents a major performance bottleneck. You can check the Web site for 
<A HREF="http://www.cs.virginia.edu/stream/"> STREAM </A> a new benchmark specifically created to address this issue, for more information on this topic.</P>
<P>One of nbench-byte nicest features is that it calibrates itself. For each of the tests it determines a minimum amount of work that needs to be done to be able to accurately measure the time needed. Then it runs that test five times and does a statistical analysis (using the student-t distribution) to see if the results are consistent (meaning that the probability is at least 95% that the true mean of the results is within 5% of the calculated mean of the results). If not, then nbench runs the test up to twenty-five times more and does the statistical analysis after each additional test run. If consistency cannot be achieved within a total of thirty runs, a warning will be issued when the score gets reported. </P>
<P>In terms of raw data statistical processing, nbench-byte 2.1 goes beyond all the other benchmarks I have ever come across.</P>
<P>Another very interesting feature of this benchmark suite is its portability across a wide range of OS's and platforms. However, because of fundamental differences in compiler/libraries/memory management in different OSes, this benchmark should <B>not</B> be carelessly used to compare results across platforms. This is not an OS benchmark, it's a CPU benchmark (see the pitfalls subsection below). You have been warned.</P>
<H3>Benchmark setup</H3>


<P>We are doing comparative benchmarking, so we will be using exactly the same hardware for our benchmark runs. All that will change between runs is:
<OL>
<LI>The processor (one run with a 6x86MX, the other run with a K6).</LI>
<LI>A small cyrix.rc file that was added to the rc.local script. This calls set6x86 to setup a few internal 6x86MX registers. The K6 does not need this file.</LI>
</OL>
</P>
<P>Also note that we are using the precompiled nbench executable, as shipped in the tar.gz package.</P>
<P>To describe our hardware setup, we resort to the Linux Benchmarking Toolkit Report Form:</P>
<P>LINUX BENCHMARKING TOOLKIT REPORT FORM 
<PRE>
CPU   
</PRE>

<PRE>
=== 
 
</PRE>

<PRE>
Vendor: AMD/Cyrix
</PRE>

<PRE>
Model: K6-166/6x86MX-PR200
</PRE>

<PRE>
Core clock:166 MHz (2.5 x 66MHz) 
</PRE>

<PRE>
Motherboard vendor: ASUS 
</PRE>

<PRE>
Mbd. model: P55T2P4 
</PRE>

<PRE>
Mbd. chipset: Intel HX 
</PRE>

<PRE>
Bus type: PCI 
</PRE>

<PRE>
Bus clock: 33 MHz 
</PRE>

<PRE>
Cache total: 512 Kb 
</PRE>

<PRE>
Cache type/speed: Pipeline burst 6 ns 
</PRE>

<PRE>
SMP (number of processors): 1
 
</PRE>

<PRE>
RAM 
</PRE>

<PRE>
=== 
 
</PRE>

<PRE>
Total: 32 MB 
</PRE>

<PRE>
Type: EDO SIMMs 
</PRE>

<PRE>
Speed: 60 ns 
 
</PRE>

<PRE>
Disk 
</PRE>

<PRE>
==== 
 
</PRE>

<PRE>
Vendor: IBM 
</PRE>

<PRE>
Model: IBM-DCAA-34430 
</PRE>

<PRE>
Size: 4.3 GB 
</PRE>

<PRE>
Interface: EIDE 
</PRE>

<PRE>
Driver/Settings: Bus Master DMA mode 2
 
</PRE>

<PRE>
Video board 
</PRE>

<PRE>
=========== 
 
</PRE>

<PRE>
Vendor: Generic S3 
</PRE>

<PRE>
Model: Trio64-V2 
</PRE>

<PRE>
Bus: PCI
</PRE>

<PRE>
Video RAM type: 60 ns EDO DRAM 
</PRE>

<PRE>
Video RAM total: 2 MB 
</PRE>

<PRE>
X server vendor: XFree86 
</PRE>

<PRE>
X server version: 3.3
</PRE>

<PRE>
X server chipset choice: S3 accelerated 
</PRE>

<PRE>
Resolution/vert. refresh rate: 1152x864 @ 70 Hz 
</PRE>

<PRE>
Color depth: 16 bits 
 
</PRE>

<PRE>
Kernel 
</PRE>

<PRE>
====== 
 
</PRE>

<PRE>
Version: 2.0.29
</PRE>

<PRE>
Swap size: 64 MB
 
</PRE>

<PRE>
gcc 
</PRE>

<PRE>
=== 
 
</PRE>

<PRE>
Version: 2.7.2.3
</PRE>

<PRE>
Options: (default nbench)
</PRE>

<PRE>
libc version: 5.4.38
 
</PRE>

<PRE>
Test notes 
</PRE>

<PRE>
==========
 
</PRE>

<PRE>
Two processors tested. The 6x86MX was configured with a special rc.cyrix file.
 
</PRE>

<PRE>
RESULTS 
</PRE>

<PRE>
======== 
 
</PRE>

<PRE>
Linux kernel 2.0.0 Compilation Time: N/A
</PRE>

<PRE>
Whetstone Double Precision (FPU) INDEX: N/A 
</PRE>

<PRE>
UnixBench 4.10 system INDEX: N/A 
</PRE>

<PRE>
Xengine: N/A 
</PRE>

<PRE>
nbench-byte integer INDEX: 6x86MX - 0.686; K6 - 0.713
</PRE>

<PRE>
nbench-byte memory INDEX: 6x86MX - 0.753; K6 - 0.793
</PRE>

<PRE>
nbench-byte floating-point INDEX: 6x86MX - 0.655; K6 - 0.802
</PRE>

<PRE>
Comments 
</PRE>

<PRE>
========= 
 
</PRE>

<PRE>
With the CPU case open, it took me 30 minutes to run nbench-byte on the two processors!
 
 
</PRE>
</P>
<H3>Detailed benchmark results</H3>


<P>One can get very detailed benchmark results with nbench-byte 2.1 by specifying the -v option. However, here we are only showing the normal output from a standard run, first on the 6x86MX, then on the K6:</P>
<P><B>6x86MX results:</B></P>
<P><CODE> </CODE></P>
<P><CODE>BYTEmark* Native Mode Benchmark ver. 2 (10/95)</CODE></P>
<P><CODE>Index-split by Andrew D. Balsa (11/97)</CODE></P>
<P><CODE>Linux/Unix* port by Uwe F. Mayer (12/96,11/97)</CODE></P>
<P><CODE> </CODE></P>
<P><CODE>TEST                : Iterations/sec.  : Old Index   : New Index</CODE></P>
<P><CODE>                    :                  : Pentium 90* : AMD K6/233*</CODE></P>
<P><CODE>--------------------:------------------:-------------:------------</CODE></P>
<P><CODE>NUMERIC SORT        :          80.681  :       2.07  :       0.68</CODE></P>
<P><CODE>STRING SORT         :          11.107  :       4.96  :       0.77</CODE></P>
<P><CODE>BITFIELD            :      2.1997e+07  :       3.77  :       0.79</CODE></P>
<P><CODE>FP EMULATION        :          8.5349  :       4.10  :       0.95</CODE></P>
<P><CODE>FOURIER             :          881.21  :       1.00  :       0.56</CODE></P>
<P><CODE>ASSIGNMENT          :         0.71582  :       2.72  :       0.71</CODE></P>
<P><CODE>IDEA                :          147.28  :       2.25  :       0.67</CODE></P>
<P><CODE>HUFFMAN             :          58.095  :       1.61  :       0.51</CODE></P>
<P><CODE>NEURAL NET          :         0.70897  :       1.14  :       0.48</CODE></P>
<P><CODE>LU DECOMPOSITION    :          27.869  :       1.44  :       1.04</CODE></P>
<P><CODE>==========================ORIGINAL BYTEMARK RESULTS==========================</CODE></P>
<P><CODE>INTEGER INDEX       : 2.861</CODE></P>
<P><CODE>FLOATING-POINT INDEX: 1.181</CODE></P>
<P><CODE>Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0</CODE></P>
<P><CODE>==============================LINUX DATA BELOW===============================</CODE></P>
<P><CODE>C compiler          : gcc version 2.7.2.3</CODE></P>
<P><CODE>libc                : libc.so.5.4.38</CODE></P>
<P><CODE>MEMORY INDEX        : 0.753</CODE></P>
<P><CODE>INTEGER INDEX       : 0.686</CODE></P>
<P><CODE>FLOATING-POINT INDEX: 0.655</CODE></P>
<P><CODE>Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38</CODE></P>
<P><CODE>* Trademarks are property of their respective holder.</CODE></P>
<P><B>K6 results:</B></P>
<P><CODE> </CODE></P>
<P><CODE>BYTEmark* Native Mode Benchmark ver. 2 (10/95)</CODE></P>
<P><CODE>Index-split by Andrew D. Balsa (11/97)</CODE></P>
<P><CODE>Linux/Unix* port by Uwe F. Mayer (12/96,11/97)</CODE></P>
<P><CODE> </CODE></P>
<P><CODE>TEST                : Iterations/sec.  : Old Index   : New Index</CODE></P>
<P><CODE>                    :                  : Pentium 90* : AMD K6/233*</CODE></P>
<P><CODE>--------------------:------------------:-------------:------------</CODE></P>
<P><CODE>NUMERIC SORT        :          82.229  :       2.11  :       0.69</CODE></P>
<P><CODE>STRING SORT         :           10.57  :       4.72  :       0.73</CODE></P>
<P><CODE>BITFIELD            :      2.0672e+07  :       3.55  :       0.74</CODE></P>
<P><CODE>FP EMULATION        :          6.4842  :       3.11  :       0.72</CODE></P>
<P><CODE>FOURIER             :          1117.1  :       1.27  :       0.71</CODE></P>
<P><CODE>ASSIGNMENT          :         0.93388  :       3.55  :       0.92</CODE></P>
<P><CODE>IDEA                :          158.42  :       2.42  :       0.72</CODE></P>
<P><CODE>HUFFMAN             :          81.407  :       2.26  :       0.72</CODE></P>
<P><CODE>NEURAL NET          :          1.0764  :       1.73  :       0.73</CODE></P>
<P><CODE>LU DECOMPOSITION    :          26.521  :       1.37  :       0.99</CODE></P>
<P><CODE>==========================ORIGINAL BYTEMARK RESULTS==========================</CODE></P>
<P><CODE>INTEGER INDEX       : 2.990</CODE></P>
<P><CODE>FLOATING-POINT INDEX: 1.445</CODE></P>
<P><CODE>Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0</CODE></P>
<P><CODE>==============================LINUX DATA BELOW===============================</CODE></P>
<P><CODE>C compiler          : gcc version 2.7.2.3</CODE></P>
<P><CODE>libc                : libc.so.5.4.38</CODE></P>
<P><CODE>MEMORY INDEX        : 0.793</CODE></P>
<P><CODE>INTEGER INDEX       : 0.713</CODE></P>
<P><CODE>FLOATING-POINT INDEX: 0.802</CODE></P>
<P><CODE>Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38</CODE></P>
<P><CODE>* Trademarks are property of their respective holder.</CODE></P>
<H3>Data analysis</H3>


<P>We will concentrate on the Linux data, for obvious reasons. As we can see, whereas the 6x86MX outperforms the K6 on some tests by a narrow margin (approx. 6%), the K6 vastly outperforms the 6x86MX on other tests.</P>
<H3>Conclusion</H3>


<P>On our synthetic test nbench-byte version 2.1, the K6 has shown slightly better performance than the 6x86MX, running at the same 166MHz (2.5 x 66MHz) clock rate on exactly the same hardware.</P>

<H2><A NAME="ss5.2">5.2 Pitfalls</A></H2>


<P>The basic pitfall that one should be warned against concerning nbench-byte applies similarly to all benchmarks: one should not to try to use this tool for something it was not designed for. Since this is a CPU benchmark, do not use it to test OS performance, video bandwidth, or any other feature that implies I/O activity. Also, it is not an adequate tool for comparing compilers and/or C and math libraries.</P>
<P>This is less obvious than it seems at first. For an accurate, thorough, documented discussion of this particular pitfall, you are referred to 
<A HREF="http://www.tux.org/~mayer/linux/compare/index.html">one of Uwe's excellent pages on benchmarking</A></P>
<P>Another pitfall would have been to compare the two processors running on widely different machines. Motherboard, cache and RAM timing setup can skew results by as much as 10%. Compilation options and libraries can also skew results by 25% or more.</P>

<HR>
<A HREF="./Article3e-4.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<A HREF="./Article3e-6.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc5"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<A HREF="./Article3e-5.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<A HREF="./Article3e-7.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc6"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<HR>
<H2><A NAME="s6">6. In the next article</A></H2>


<P>I had initially estimated that four articles would be enough for an overview of GNU/Linux benchmarking, but recently more issues have been raised and more questions have been asked than I could address in just four articles. The next article will deal with exactly this problem: <EM>Available Linux Benchmarking Data and Open Issues.</EM>
<UL>
<LI>The Linux Benchmarking Project. </LI>
<LI>Available Linux benchmarking data on the Web. </LI>
<LI>Suggestions for further Linux benchmarking. </LI>
<LI>A system benchmark: UnixBench.</LI>
</UL>
</P>
<HR>
<A HREF="./Article3e-5.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<A HREF="./Article3e-7.html"><IMG SRC="./gx/balsa/next.gif" ALT="Next"></A>
<A HREF="./Article3e.html#toc6"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<A HREF="./Article3e-6.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<IMG SRC="./gx/balsa/next.gif" ALT="Next">
<A HREF="./Article3e.html#toc7"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>
<HR>
<H2><A NAME="s7">7. Notes</A></H2>


<P>(1)
<A NAME="sophism"></A> 
 Basic objective of Sophists: win all arguments by any means available. Truth, logical coherence and argument transparency did not matter to Sophists. They were fought (on intellectual grounds, of course) by Socrates and Plato and later by Aristotle. A quick search on Yahoo/Altavista with keywords <EM>Sophism</EM> or <EM>Gorgias</EM> will turn up some information on the subject.</P>
<P>(2) 
<A NAME="arm"></A> 
StrongARM: this is an architecture developed at Digital, based on the <B>
<A HREF="http://www.arm.com ">Advanced Risc Machines </A></B>design. It provides roughly the same CPU processing performance as a 133 MHz Pentium at a fraction of the cost and with a ridiculously low power consumption (&lt; 0.5W). Intel's purchase of Digital's microelectronics operation includes the design rights to the StrongARM, so the future of this architecture is unknown (as of December 97). Note that Linux has been ported to some implementations of the ARM architecture. The 
<A HREF="http://www.corelcomputer.com/products/vnc/overview/">Corel Java NC </A>is based on Linux/ARM and uses the latest version of the StrongARM SA-110 CPU.</P>
<P>The following is strictly rumour: Digital didn't quite know what to do with the StrongARM design, since as a product it didn't fit Digital's corporate culture of high-margin minis and workstations. On the other hand, it was just a nice bargain for Intel, who was looking for exactly that sort of CPU to address the future "appliance PC" market, ideally complementing the Pentium family. Since the details of the Digital/Intel deal have been kept secret, one can only guess how much Intel paid for the StrongARM design, but rumour has it that Digital's negociators were not even aware of how strategically important this CPU was to Intel.</P>
<P>(3) 
<A NAME="freedom"></A> 
To get a clearer idea of what <EM>free</EM> means in the GNU/Linux world, you are referred to the various Richard Stallman (founder of the 
<A HREF="http://www.gnu.org ">Free Software Foundation</A> interviews and articles, to the GNU manifest, and also of course to the text of the General Public License (GPL). In a speech in 1986, RMS said:</P>
<P><EM>"I want to establish that the practice of owning software is both materially wasteful, spiritually harmful and evil. All these three things being interrelated."</EM></P>
<P>(4) 
<A NAME="smp"></A> 
Intel did not license its APIC SMP specifications/technology to either Cyrix or AMD. Even though Cyrix and AMD agreed on a different, open specification called OpenPIC for multiprocessing, no motherboard was ever released to that standard (and no OS has ever implemented it, obviously). An excellent description of OpenPIC and x86 multiprocessing issues can be found in IBM's Application Note 40208, available in pdf format from 
<A HREF="http://www.chips.ibm.com/products/x86/">IBM's Microelectronics Web site </A></P>

<HR>
<A HREF="./Article3e-6.html"><IMG SRC="./gx/balsa/prev.gif" ALT="Previous"></A>
<IMG SRC="./gx/balsa/next.gif" ALT="Next">
<A HREF="./Article3e.html#toc7"><IMG SRC="./gx/balsa/toc.gif" ALT="Contents"></A>

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>LXNY at UNIX EXPO '97</H2>
<H4>By <a href="mailto:mesmith@panix.com">Michael E. Smith, LXNY</a></H4>
</center>
<P> <HR> <P>  
The meeting notice on Usenet (including comp.os.linux.announce) set the
tone for the event:  Richard M. Stallman's original announcement of
the GNU project (Subject: Free Unix!) was the centerpiece.  The event:
the traditional LXNY meeting at UNIX EXPO (this year a part of Miller
Freeman's IT Forum '97) in New York City.  The speaker:  Bryan Sparks,
Founder and CEO of Caldera, Inc.  The setting:  a corner room at the
Javits Center seating 75, with a crowd of approximately 100
enthusiasts overflowing into the corridor.
<P>
Jay Sulzberger of LXNY delivered a rousing introduction to the
speaker, establishing a martial-revolutionary theme.  After regaling
the assembled troops with stories of RMS at MIT, he echoed Linus
Torvalds' call for more applications and strongly cautioned Linuxers on
the need to avoid internecine conflict -- the war is to be waged on many
fronts in many ways, even including alliances with commercial vendors.
(Caldera offers both free and commercial versions of Linux (and (DR)
OpenDOS).)  Sparks spoke about the Caldera international operation,
non-desktop environments (especially kiosks), their partnerships,
their lawsuit against Microsoft, the continuing phenomenal
growth of Linux and the need for perseverance.  He
mentioned that Caldera has sold 2,000,000 copies of OpenDOS.
<P>
Caldera brought some of their partners to the meeting including Corel
(WordPerfect for Linux), Enhanced Software Technologies (bru), AppGen
Business Software, FacetCorp, TwinCom and ICentral.  Also represented
were VAResearch and Non-Profit Computing.  Caldera provided food,
T-shirts, flashlights and OpenLinux Lite CDs to all present.
<P>
LXNY's booth at the show, which contained a display of Linux
publications, was as big a success as the meeting.

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Michael E. Smith <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./Article3e.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./nelson.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>More Adventures with SAMBA</H2>
<H4>By <a href="mailto:nelson@er.doe.gov">Dave Nelson</a></H4>
</center>
<P> <HR> <P>  
If you haven't networked your small office/home office computers,
ethernet prices are now so cheap you can't afford not to! I
recently installed a three-computer LAN, including my dual-
boot Linux/Win95 box (named Dave), my wife's WfW 3.11 box (named
Kathy), and my Linux/Win95 portable. We share files among the
three computers and print to the laser printer on Dave from
within Windows.  
<P>
The SMB protocol (server message blocks) does all this over IP.
SMB/IP is built into Win95 and WfW; Linux uses the Samba program
to talk SMB. A special challenge was to get Dave to look the same
to Kathy whether Dave is booted in Linux or Win95. This technique
could also be helpful if you are changing from a Windows server
to a Linux server, and you don't want to redo the settings on
each client. All the software is free, once you own the operating
systems. My total hardware costs were under $100, including a
five port 10 base T hub, network interface cards, and
twisted-pair cables.
<P>
John Fisk's article on Samba in LG issue 20 was a great
introduction to Samba. I used it to get started. Then I added
printing from Windows to Linux, solved some file permission
problems, and figured out how to make Dave look the same to Kathy
under Linux or Win95. I'm sure what I did could be improved on --
I am new to Samba and only a journeyman at Linux, but this way
works. If you worry about security, you may want to add
passwords. Between my wife and me security isn't a problem ;-) 
<P>
An example of Samba's power: my wife runs Quicken on Kathy under
Windows. She transparently uses the Quicken data file stored in a
DOS partition on Dave running Linux. She transparently prints
from Quicken to the laser printer on Dave. She doesn't have to
change any settings on Kathy when I switch Dave between Linux and
Win95. And my settings on Dave are handled automatically on
bootup. Way cool!
<P>
Here's how I did it:
<P>
I used System Commander to dual boot My box (Dave)to Win95 or
Linux. I installed networking on both operating systems, using
the same IP addresses. I named my SMB group "home." Fisk's
article shows how to do most of this. My Linux release (Caldera)
comes with Samba installed. Probably your release does too. Samba
runs as two daemons: smbd and nmbd. Find them by typing
<PRE>
which smbd; which nmbd
</PRE>
If they are installed, they are probably in /usr/sbin. If not,
install them. Caldera Linux starts them on bootup by running the
script /etc/rc.d/init.d/smb. Note that if you change the Samba
configuration file, it isn't necessary to reboot (at least using
Caldera or Red Hat.) Just issue the commands
<PRE>
/etc/rc.d/init.d/smb stop
/etc/rc.d/init.d/smb start
</PRE>
and Samba will be reconfigured. Fisk's article points out that
Samba may also be started by init.d. You don't want to start
Samba twice, so check your settings after reading Fisk.
<P>
I created the following /etc/smb.conf file on Dave:
<PRE>
[global]
   workgroup = home
   printing = bsd
   printcap name = /etc/printcap
   load printers = yes
   guest account = dos

[printers]
   comment = All Printers
;   print command = cp %s /tmp/tmp.print
   print command = lpr -Pepson -b %s
   browseable = yes
   printable = yes
   public = yes
   writable = no
   create mode = 0700

[d]
   comment = DOS Disk d:
   path = /mnt/diskd/
   public = yes
   writable = yes
   printable = no
   guest ok = yes
</PRE>
The [global] section of smb.conf tells Samba that my workgroup is
called "home," the printer description file is /etc/printcap, and
the user (or guest account) for dos services is "dos." To set up
the user "dos" run the program "adduser dos" or just edit the
/etc/passswd file. I had to edit /etc/passwd after running
adduser to get things right. My /etc/passwd file has the
following line for the user dos:
<PRE>
dos::501:500:DOS files:/home/dos:/bin/false
</PRE>
In order of fields this line says the user is dos; dos needs no
passwd; its user number is 501; its group number is 500; it is
called DOS files (this field is just a comment); its home
directory is /home/dos; and it has no shell privileges. The user
and group number were assigned by adduser; they don't have to be
501,500. To test that the user dos is set up right, change
/bin/false to /bin/bash and log on as dos.  You shouldn't need a
password and should get a bash shell prompt. Then change back to
/bin/false to close the security hole. When I ran adduser, I told
it that dos belongs to group DOS, and it added the group DOS to
the /etc/group file with the line
<PRE>
DOS::500:
</PRE>
The [printers] section sets up printing for DOS. The commented-
out line "print command = cp %s /tmp/tmp.print" is a great way to
debug Samba printing. I found this in the help file
"Printing.txt" that comes in the Samba package. If this line is
uncommented and the next one commented out, the print file from
Kathy appears on Dave as /tmp/tmp.print rather than being sent to
the printer. You can check whether it arrived OK and try printing
it by running lpr. The line "print command = lpr -Pepson -b %s"
does the actual printing.  The option "-Pepson" says to use the
"epson" printer description in /etc/printcap. My laser printer on
Dave is called "epson" under Win95, and Kathy expects to see the
same name under Linux. The option "-b" tells lpr to accept the
binary print files that Windows produces. Otherwise lpr chokes
because its default is to expect ASCII files, and the printer
does nothing. (Maybe this fix is the same as what is called raw
mode printing?) The "%s" parameter represents the file name being
sent to Samba.
<P>
I created a section in /etc/printcap for the epson printer: 
<PRE>
epson:\
        :sd=/var/spool/lpd/lp:\
        :mx#0:\
        :lp=/dev/lp1:\
        :sh:
</PRE>
Notice there is no "if=" line, i.e. no input filter that
processes the binary print file. My printer is an Epson 7000,
basically a HPIIp clone, so it expects the DOS convention of CRLF
at line's end.  If I tried to use this printer description when
printing under Linux, which only sends the Unix standard LF, I
would see the dreaded staircase effect.
<P>
The [d] section of smb.conf describes the shared disk that Kathy
expects to be called "d," the same as drive D: under DOS. I mount
it as /mnt/diskd in Linux. 
<P>
I ran into a puzzling problem with user permissions (probably
either my ignorance of standard Unix practice, or something weird
about msdos filetype.) The user dos needs to have write
privileges to the directory /mnt/diskd and all its files. But I
couldn't make that happen using chmod, chown, or chgrp. As soon
as I would reboot and mount the file system, /mnt/diskd would
revert to the following privileges: 
<PRE> 
drwxr-xr-x  44 root  root  18432 Dec 31  1969 diskd/
</PRE> 
The missing "w" for group and others did me in as long as root
owned the directory.
<P>
I fixed this by editing the line in /etc/fstab for /mnt/diskd to
be the following:
<PRE> 
/dev/hda5  /mnt/diskd  msdos   user,noauto   0     0
</PRE> 
The important field is user,noauto, which means mountable by a
user and don't automatically mount on bootup. The I added a line
to /etc/rc.d/rc.local to mount diskd as user dos:
<PRE> 
mount -ouid=501,gid=500 /mnt/diskd
</PRE> 
This says mount /mnt/diskd with option (-o) of user id 501 and
group id 500, which correspond to the user dos. If your adduser
gives dos a different uid and gid, just change this line
appropriately. If you have trouble mounting diskd on bootup, try
logging in as dos (after changing the /etc/passwd line for dos to
/bin/bash) and mounting diskd manually. When that works, go back
and get the rc.local line to work right. 
<P>
As John Fisk wrote: one thing about Linux, it hones your problem
solving skills. If you have problems, look in Samba's logs and
message files. On my system the logs are in /var/log/smbd and
/var/log/nmbd. Messages are in the directory var/samba.
<P>
That's all it took for me to set up Samba. The Samba
documentation shows a wealth of different configurations. At
first I found them all daunting, but by chipping away, one
problem at a time, things came more easily. I hope this article
helps you get started. Who needs NT servers anyway?

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Dave Nelson <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./smith.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./campo.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>My Linux Revolution </H2>
<H4>By Ylian Saint-Hilaire &amp; <A
HREF="mailto:campo@atm.teleinfo.uqam.ca">Erik Campo</A></H4>
</center>
<P> <HR> <P>  
For a long time, I  lived in my  cave, doing my thing.  One day, I got
out of my nice,  very functional cave and  saw that my fellow  man had
built a house just outside. It had all the same functions that my cave
had but was much comfortable and livable (for  one, you didn't have to
push a boulder to close the door every night). 
<p>
Many years later, I got Linux installed on my personal computer, doing
my thing. One day, surfing the net, I saw  my fellow man programming a
new version of  Linux, which had a great  user interface, was  easy to
install  and possessed much more new  added  features. For a long time
user of  Linux on an i386 like  me all Linux  was good for was routing
packets. This was a shock. 
<p>
Of course, the new user interface I am talking about is called the KDE
project, which  along with the  new Red Hat  distribution version 5.0,
the very active www.linux.org site and the many applications available
form   an  incredible  package.  To  my    great astonishment,   Linux
development is in full acceleration and is  starting to be viewed as a
real contender  to  Microsoft Windows  NT.  Not too  long ago,  people
installing Linux  on a  computer  where viewed  as computer  gurus, or
mystic "roots". With the arrival of  user friendliness, the question I
ask myself is: Is Linux  going to become an  operating system for  the
general public? 
<p>
Some people will feel bad  of loosing the  respect  of being the  only
ones able to install Linux in their social group.  As opposed to them,
I welcome this new age. I can't wait  to install Linux at my grandma's
place.  The operating system of  the people will  finally come back to
the people. 
<p>
This will, however  change  many things. If less  technically inclined
people jump on   the Linux wagon, new   demands will be  generated for
easier-to-use  software and better support and  help files. My grandma
will  ask  for drag-and-drop support   and  very large fonts. The  new
people on the  wagon will  not be of   much help in moving it  forward
(have you ever seen your grandma code lately?). Still, they will bring
new respect to the OS, and, well, why not, perhaps new ideas. 
<p>
Some time ago,  word from "Santa Cruz" was  that we had to upgrade out
of Linux. This of course was funny and  it highlighted the maturity of
Linux. Not only  that Linux  is free   but it compares  better (on  my
scorecard)  to  almost any other    operating system. And  unlike some
"other" operating system,   Linux is soon  to become  a general public
operating system (hello grandma!). 
<p>
So,  I finally decided I was  going to move out  of my cave and into I
much more respectable house. But the most important thing of it all, I
must start keeping  track of  the  developments and  start pushing the
wagon myself. By the way, Linux makes a great Christmas gift! 

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Ylian Saint-Hilaire &amp; Erik Campo<BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./nelson.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./ayers.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->
<center><h1>KDE and Gnome</h1></center>

<center>
<h4><a href="mailto: layers@marktwain.net">by Larry Ayers</a></h4>
</center>


<hr>
<center><h3>Introduction</h3></center>

<p>Watching the Linux operating system begin to mature is interesting these
days.  A couple of years ago much attention was devoted to incompatibilities
with various hardware components, networking, and the development of the
kernel itself.  Though these activities continue, it's no longer necessary to
follow these development efforts as closely in order to run a dependable Linux
system.  Distributions have improved immensely, and now more free-software
developers are turning their attention towards refinement and integration of
the user interface.  Two separate projects have arisen in the past year, KDE
(the K Desktop Environment) and GNOME (the Gnu Network Object Model
Environment).  Both of these projects include among their stated goals the
desire to make the administration and usage of a Linux system easier for
beginners, in part by employing a uniform look-and-feel for the most commonly
used applications and utilities, as well as interoperability of the system
components.  It's difficult to make much of a comparison between the two, as
KDE is much farther along than GNOME, but I'll make an attempt.

<center><h3>Commonalities</h3></center>

<p>There is one common structural aspect to these two projects.  They each
rely on a group of shared libraries, which provides the interface to basic OS
operations, such as file-reading and saving, as well as basic display and
appearance functions.  The end result of this is that an installation will
populate adirectory with a variety of shared libraries, which in turn
supports another directory of fairly small executables.  The Gimp works this
way as well; the individual plug-ins tand to be small, but rely on the
services provided by both the GTK and the Gimp shared libs.  This approach
facilitates contributions by programmers not directly involved with a project,
as many of the low-level and window-display functions are already written,
allowing a contributed application or extension to "hook" into them.

<center><h3>KDE</h3></center>

<p>The first of the two to gain momentum was KDE.  About a year ago a group of
developers, mainly European, began coding the components of this ambitious
project.  They chose the Qt toolkit (from TrollTech in Norway) as the GUI
framework, a decision which has since led to some controversy. Qt has a few
licensing restrictions which, though not onerous for end-users, can cause
problems for the creators of CDROM-based distributions.  Advocates of
GNU-style free software tend not to favor Qt, a circumstance which led to the
creation of the GNOME project.

<p>Setting aside the thorny licensing issues, the KDE developers have managed
to pull together quite a remarkable system in the past year, though numerous
bugs still remain evident.  The second public beta was released in November of 
1997, and I compiled and installed it soon after.  (I had briefly tried the
initial beta, but found it too unstable to evaluate).    

<p>This second release still has flaky aspects, but enough of it works to give 
the user an idea of what the developers are planning to accomplish.  In effect 
KDE is a sort of GUI wrapper around an existing Linux system, which attempts
to simplify system-administration tasks and offer interacting and compatible
utilities and applications.  Kfm is at the core of the system, as it is
intended to be left running in the background and serves as the help-viewer
for all of the KDE components.  Kfm is also a file-manager (icon-based, with
some resemblance to xfm and moxfm) and serves creditably as a web-browser.

<p>Kfm is an impressive application, and in itself justifies trying out KDE.
Many of the other applications are replacements for programs which most Linux
users probably already have and would only be desirable if a complete KDE
system is the goal. 

<p>KDE has its own window-manager, kwm, which had some display faults on my
system.  Due to these video artifacts I didn't use it much, but it did appear
stylish and well-designed.  It seems that these display bugs don't show up on
most systems; I suspect that it depends upon the video-card and X-server in
use.

<p>A new Linux user (especially someone accustomed to Windows or Macintosh
systems) might appreciate the relative ease of configuration and use which KDE
offers.  In a sense, KDE extends the scope of the tasks traditional
distributions perform.  One drawback might be the very comfort of the KDE
environment itself; the various system-administration tasks outside of KDE's
abilities might seem too daunting or unapproachable without a KDE interface.
This won't be seen as a drawback to prospective users who lack the fascination
with internals and configuration which in the past has typified Linux users.

<p>Some KDE users have reported that they find the system usable and useful,
but with my particular setup this wasn't the case.  But I have to say that my
extensively customized Linux installation seems perfectly satisfactory as is,
and I probably lack the motivation to spend the time learning to adapt KDE to
my needs.  If KDE had existed back when I first booted up a Slackware system
some years ago, who knows...

<center><h3>GNOME</h3></center>

<p>Miguel Icaza (head of the Midnight Commander development group) also seems
to be at the helm of the new GNOME development project, which has goals
similar to those of KDE, with one difference: the project is composed
completely of GNU-style free software.  This project is based upon the GTK
toolkit, the free successor to Motif in the Gimp development efforts.  The
project arose as a direct response to the KDE project, and the GNOME
developers have borrowed some code from KDE for a few of the applets.

<p>As of late December (version 0.10) GNOME as a whole isn't really suitable
for actual use, but several of the applets function well and the future looks
bright for the project.  Miguel Icaza is in the process of porting the
Midnight Commander file-manager to GTK, which will let it fit in with the
remainder of the GNOME applications.

<p>The Panel applet, written primarily by Federico Mena Quintero, is an
icon-bar and program-launcher which locates itself at the bottom edge of the
screen.  It features cascading menus which could be a substitute for the usual
window-manager root menus.  Most of the GNOME applets have been included in
the default menu of Panel, allowing this applet to serve as an entry-point to
the GNOME installation.  It takes a little fiddling around to get the hang of
using Panel, so don't give up if at first glance it seems like nothing is 
working

<p>The provided applets include a desktop-manager (which in part serves as an
interface to the <b>Xlockmore</b> screensaver), CroMagnon (an interface to
the crontab utility), an audio mixer, an interface to the elaborate LinuxConf
configuration manager, several nicely-done games (some of which were adapted
from KDE), and several others.  

<p>One major difference between GNOME and KDE is that KDE includes a
window-manager, whereas GNOME doesn't, and is designed to cooperate with a
user's current window-manager.  This may make GNOME more appealing to seasoned 
users who have extensively customized their window-manager resource files.

<center><h3>Conclusion</h3></center>

<p>As I write this only the source code is available for GNOME 0.10, and it's
tricky to compile.  An intel-Linux binary archive of the 0.9 release is
available from <a href="ftp://ftp.nuclecu.unam.mx/GNOME">this site</a>, but I
would recommend waiting a while for either an updated binary release or an
easier-to-build source release.  The developers are hard at work these days
(judging by their mailing-list postings) and I think that, given time,
something both interesting and usable will appear. 

<p>Though KDE is closer to being "finished" (if such a state even
exists in the realm of software), it still has a ways to go.  Development is
proceeding rapidly, and I imagine that sometime this year a more polished
release will become available.

<p>The fate of a free-software project is interesting because of the inherent
unpredictability.  Anyone can start one, but whether it comes to fruition or
withers on the vine is up to the inscrutable software gods.  The timing may be
just right (i.e., it addresses many users (and developers!) needs) but
convincing enough programmers with time and inclination to become involved just
can't be forced or foretold.  These two projects seem to have attained that
essential momentum, and hopefully we shall see them evolve further.

<!-- hhmts start --> Last modified: Sun 4 Jan 1998 <!-- hhmts end -->
<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Larry Ayers <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./campo.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./ayers2.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->
<center><h1>Updates and Correspondence</h1></center>

<center>
<h4><a href="mailto: layers@marktwain.net">by Larry Ayers</a></h4>
</center>

<hr>

<p>Here in north-east Missouri we are currently afflicted with a
heavy, wet snowfall, so the time is ripe to write a page updating
some of my past Gazette articles, along with some e-mail which
has come my way.

<center><h3>More Text-Processing</h3></center>

<p>I've received quite a few messages concerning my article in LG
#22, <strong>Word-Processing vs. Text-Processing</strong>.  Eric
Marsden sent this message concerning the <b>Lout</b>
text-formatting system:<br>

<blockquote>
<p>From: Marsden Eric &lt;emarsden@mail.dotcom.fr&gt;<br>
To: layers@marktwain.net<br>
Subject: [LG] Lout-mode for Emacs<br>

<p>Hello Mr Ayers,<br>

<p>In the October Linux Gazette you wrote an article comparing
different document formatters, and mentioned Lout in passing. I
noticed that you regretted the lack of an Emacs mode for Lout
code.

<p>I agreed with you, and set out to write one. Indeed, there are
now <i>two</i> Emacs modes, since another Lout user had also set about
writing one, independently of my effort. Both are available on my
<a href="http://www.chez.com/emarsden/lout/">site</a>, where you'll also find 
the Lout FAQ/HOWTO.

<p>You were right to mention that "The Lout system is still
maintained and developed"; Jeff Kingston is quite receptive to
suggestions and requests for new features in the formatter, which
is far from being the case for TeX (now frozen) and LaTeX (whose
development group seems very closed).

<p>I agree that Lout is very much less widely used than LaTeX, which
is a definite disadvantage. I believe that things will change
over time, in particular given Lout's very strong capabilities
for mixing graphics and text. I might even write an article for
the Linux Gazette myself to spread the word.

Eric Marsden<br>
emarsden @ mail.dotcom.fr<br>
It's elephants all the way down. [LA: sounds like a Terry<br>
Pratchett quote!]
</blockquote>

<p>I tried out the XEMacs mode found at the above link, and
though it's still under development, it works well here and is
well worth investigating.
<hr>

<p>Here's another interesting message:<br>

<blockquote>
<p>From: oliver@fritz.co.traverse.com (Christopher Oliver)<br>
Subject: TeX/GROFF<br>
To: layers@marktwain.net<br>

<p>I noticed in your defense of mark-up systems, you didn't touch on
issues regarding quality of output.  If you write on this in the
future, you might find <b>What has WYSIWYG done to us?</b> by
typographer Conrad Taylor quite interesting.  I think he makes
quite a case that the word processors aren't suitable if the user
cares about the quality of the typesetting.  I think there is a
lot of good thinking there for folk involved with document
production at any level.
This <a href="http://www.ideography.co.uk/library/seybold/WYS-ante.html">link</a> will take you to the article.

<p>Regards,<br>

<p>Christopher Oliver&nbsp;&nbsp;&nbsp;&nbsp;Traverse Communications<br>
Systems Coordinator&nbsp;&nbsp;&nbsp;&nbsp;223 Grandview Pkwy, Suite 108<br>
oliver@traverse.com&nbsp;&nbsp;&nbsp;&nbsp;Traverse City, Michigan, 49684
</blockquote>
<hr>

<p>Another message concerning Emacs and LaTeX:<br>

<blockquote><p>To: layers@marktwain.net<br>
Subject: Word Processing and Text Processing<br>
From: Peter S Galbraith &lt;galbraith@mixing.qc.dfo.ca&gt;<br>

<p>Nice summary!<br>

&gt; Emacs provides excellent syntax highlighting for LaTeX files,<br>
&gt; which greatly improves their readability.<br>

<p>I also wrote a better syntax highlighting Emacs package for LaTeX
files, called font-latex.el.  I think I should make it part of
Emacs.  I doubt you knew about it even though it's distributed as
a contributed package with AUC-TeX.<br>

&gt; Xtem has one feature which is useful for LaTeX beginners:<br>
&gt; on-line syntax help-files for the various LaTeX commands.<br>

<p>There are a few add-on packages to AUC-TeX that do this by
interfacing with latex info files:<br>
<ul>
  <li>http://www.ifi.uio.no/~jensthi/word-help.el
  <li>ftp://ftp.phys.ocean.dal.ca/users/rhogee/elisp/func-doc.el
</ul>

<p>Peter Galbraith, research scientist<br>
Maurice-Lamontagne Institute,<br>
Department of Fisheries and Oceans Canada<br>
</blockquote>

<p>I confess I'd seen Mr. Galbraith's <b>font-latex.el</b> in the 
AucTeX distribution files, but didn't realize that it is an
extra package which must be explicitly loaded.  The version
included with AucTeX is an older one; I recommend downloading the 
latest revision from this FTP
<a href="ftp://ftp.phys.ocean.dal.ca/users/rhogee/elisp/">site</a>. 
Along with <b>font-latex.el</b>, a file called
<b>font-latex.tex</b> is available at the site.  This file is a
sort of demo for <b>font-latex.el</b>, illustrating its
capabilities. Some people won't like the very colorful approach
to highlighting this LISP file provides, but with judicious
selection of colors (now so much easier using the Customize
facility!) the readability of <b>TeX</b> files is much enhanced. 
<hr>

<p>I recently happened across a message posted to the
<em>comp.editors</em> newsgroup which eloquently expresses a plea
which I'm sure will resonate with many Linux users:<br>

<blockquote>
<p>From: Des Small &lt;dms@nutri-matic.mechanoid.soton.ac.uk&gt;
Newsgroups: comp.editors<br>
Subject: Re: writing an editor<br>
Date: 17 Dec 1997 22:09:22 +0000<br>
Organization: Southampton University<br>
X-Newsreader: Gnus v5.5/Emacs 20.2<br>

<p>(discussion of editor internals snipped)

<p>Given that the Unix world has already more editors than could possibly
be required, and a dearth of even modest word-processing type apps, I
would urge you at least to consider allowing multiple fonts in one
document.  You don't have to rewrite Word; we don't even have a
competitor for Notepad (simple wysiwyg-ish thing with RTF output).
And no, XEmacs does <em>not</em> count.

<p>(more discussion snipped)

<p>&lt;rant&gt;<br> But I really, really think that this
particular wheel has been reinvented often enough.  What
<em>I</em> want is a toy word processor/editor, like wordpad on
steroids, say, which could be used for writing simple letters to
Auntie (for the Windoze crowd), and to make programming more
pleasant (different faces for different bits of syntax), and a
nice HTML mode.  XML (a sort of SGML-lite) is coming, and its
facilities for structured documents could make it a snap to
develop literate programming envronments, without locking you in
to one set of tools, or using (eek!) embedded TeX.  You could
have DTD's for almost every application, and finally supercede
the (admittedly powerful) Unix "everything is a stream of bytes"
philosophy with a universally understood set of conventions for
<em>structured</em> documents.  Word processors could use XML for
storage!  You could share files across platforms!  You could even
still use Emacs or vi or joe, if you wanted to!

<p>I know XEmacs can (probably) do all this, but I want a small,
fast, cute version, that doesn't eat all my RAM.  I want to use
proportional fonts to edit text (which Sam and Wily allow)
without changing my entire world-view (which they tend to insist
on), and I don't care if it won't run on a vt100.  It's
<em>1997</em> for heaven's sake!  I have a windowing system!
(Admittedly, it's only X, but it's still a window system!)  At
the moment, my desktop has a bunch of terminal emulators, and a
couple of GNU emacs frames open.  These are powerful tools, but
they hardly constitute a rich GUI environment that would make me
the envy of all my friends (they lust after the stability of my
system, but they run away screaming when confronted with the
tools.  And they are neither stupid nor technophobic).

<p>I don't want a ultra-heavy power tool, and I don't care about
slow serial lines: I already have tools for those jobs. I just
want a sprinkling of nice fonts, and an interface which doesn't
scare off Windows or Mac users.  Context sensitive pop-up menus
might be nice, and a reasonable (in terms of looks and
functionality) menu bar, too.  Real-time spell-checking along the
lines of Word is quite a nice idea, too -- spellchecking email
and Usenet posts is overkill if it takes any effort at all. (Even
M-x ispell-buffer is effort: I have to remember to bother.)
Notepad on steroids, is all I want, really.  And it has to be
free (as in freedom-not-price, that is).

<p>Does anyone have one, or do I really have to roll my own?  And
does anyone have any info on (or pointers to) suitable data
structures for such a thing?

<p>Standard Unix tools are very powerful, and for some things I
find them indispensible.  But, for me at least, vt100
compatibility is a legacy issue.  Sometimes I use remote systems,
and then I telnet in and use vi, and I'm happy to do so.  But
most of the time I'm on my own Linux box, with 16Mb and clock
cycles to burn.  I can afford some luxuries, but I don't want a
whole XEmacs.  Is this really so weird, this late in computing
history?  Or did I swear a vow of allegience to xterms and
non-proportional fonts when I signed on as a Unix user?  Am I the
only person who finds the current situation imperfect?  Do I have
to wait for GnuStep to combine the robustness and programmability
of Unix (which I love) with a halfway-sane GUI-fied environment
for those "I want to use a tool but I haven't got a month spare
to master the interface" moments?<br> &lt;/rant&gt;

<p>Sorry to rant on like that, but I feel strongly that the many things
Unix does well should not (and in the eyes of the Heathen do not)
excuse its barely-half-hearted embracing of the possibilities of the
new-fangled (ahem...) bit-mapped screen.

<p>Des,<br>
who sometimes feels trapped in a 1980's timewarp.
</blockquote>

<p>After reading the above posting, I began to think about
editors which <em>can</em> display proportional fonts.  Off-hand
I can think of three which offer this option: XEmacs, the
semi-commercial Edith editor, and NEdit.  All three display
Postscript fonts well <em>only</em> if bitmapped versions are
available, which limits you to the fonts (such as Times Roman and
New Century Schoolbook) supplied with X.  XEmacs will attempt to
scale other Type 1 fonts but they are unaliased and unsightly.
Edith and NEdit don't even try to scale the fonts, and only the
12 point size is offered in the font dialogs.  This isn't the
fault of the editors I've mentioned; they just do what X will
allow them to do. There are several Type 1 font rasterizers under
development for Linux, and perhaps this deficiency in the X
environment will eventually be addressed.  This could be helpful
in attracting Windows users to Linux, as Win95 and NT, for all
their faults and annoyances, <em>do</em> display scalable fonts
well.

<p>If anyone knows of a technique for generating bitmapped fonts
in various sizes from standard type-1 Postscript fonts, I'd love
to hear about it!

<p>Both the Gimp and SDCorp's WordPerfect 7 port will scale
Postscript fonts flawlessly; I assume they have their own
internal font-display engines.  I imagine that StarOffice and
Applix can do the same.
<hr>

<p>A floridly-worded letter from Harry Baecker was printed in
issue 23 of LG, to which I felt compelled to respond: he seems
to think my opinions on text-processing are "a ritual obeisance
to received wisdom" and a "requisite Unixworld denigration of
word-processors and their users".  On the contrary, I have little
interaction with Unix users and my expressed opinions are a
direct result of my experiences using both word-processors and
text-formatting systems.  So there!

<p>The folks at SDCorp in Utah have made a welcome change to the
licensing scheme used in their Linux port of WordPerfect 7.  When 
the port was first released a licensing daemon had to be running
in order to run the word-processor, which would only work on the
original machine on which WP was installed.  Now the daemon isn't 
necessary, and the application isn't limited to one machine.
Rumor has it that WordPerfect 8 will be ported to Linux sometime
next year if sufficient interest is shown in the Linux community.
<hr>

<center><h3>New Editor Versions</h3></center>

<p>There have been new releases of several editors lately.  Those
of you who are of the VI persuasion will be glad to hear of new
versions of all three of the actively-maintained VI-clones.

<p>Vim is probably the most featureful of the VI-style editors.
Judging by newsgroup postings, it may be the most popular as
well.  With the release of vim-5.0s, vim 5 has finally reached a
beta rather than alpha state.  This revision has a really
well-implemented syntax-highlighting system for many programming
and shell-script languages, and it's not too difficult to adapt
to new file-types and languages.  The down-side is that vim is
growing larger, and is beginning to lose the quickness and low
memory-usage that has been a hallmark of VI-style editors.  Of
course, memory is cheap and machines are more powerful these
days, so this isn't as much of a factor as it used to be.

<p>I tend to use XEmacs as my primary editor, due to its
excellent programming modes, with vile/xvile as an adjunct for
quick editing tasks, such as config files and e-mail messages.
Vile 7.3 was released recently, and it is in my opinion the ideal
vi-style editor for an Emacs user.  It incorporates several of
the most common Emacs keystrokes, such as control-x-1 and
control-x-0, which softens the transition between the two.

<p>Recently Paul Fox, who several years ago modified the
Microemacs code until it became the first version of the vile
vi-like editor (sounds improbable, but it's true!), posted an
interesting response in the <i>comp.editors</i> newsgroup.  He
was responding to a query concerning the differences between vile 
and vim:<br>

<blockquote>
From: pgf@foxharp.boston.ma.us (Paul G. Fox)<br>
Newsgroups: comp.editors<br>
Subject: Re: Vile 7.3 Announcement<br>
Date: 29 Dec 1997 00:21:07 GMT<br>

brian moore (bem@news.cmc.net) wrote:<br>
: &gt; How about portability? I use Vim under NT at work, Linux at home.<br>
: 
: vile runs on both, and OS/2 and a bunch of other stuff.  Hell, it even<br>
: works on Solaris! :)<br>
: 

<p>and VMS and Win95.  i'm not sure which i've used less.  :-)

<p>as the original vile author, i'll chime in here, but a) i'm
biased :-), and b) i've never used vim much, except when looking
at a specific feature implementation.

<p>vile's design goal has always been a little different than that
of the other clones (and i mean elvis, vim, and nvi here -- i
don't know enough about any of the others).  vile has never
really attempted to be a "clone" at all, though most people find
it close enough.  i started it because in 1990 i wanted to to be
able to edit multiple files in multiple windows, i had been using
vi for 10 years already, and the sources to Micro-EMACS came
floating past my newsreader at a job where i had too much time on
my hands.

<p>i started by changing the uemacs keymaps in the obvious way, and
ran full-tilt into the "hey!  where's 'insert' mode gonna come
from?!" problem.  so i hacked a little more, and hacked a little
more, and eventually released in '91 or '92.  (starting soon
thereafter, major version numbers tracked the year of release:
7.3 was the third release in '97.  i don't know what tom is going
to do about the Y2K problem.  ;-)

<p>but my goal has always been to preserve finger-feel, as opposed
to display visuals , and, selfishly, to preserve finger-feel most
for the commands i use.  :-) i've never used ex mode much, so
vile doesn't have much of an ex mode.  actually, it has quite an
amazing ex mode, that works very well -- it just <em>looks</em>
really odd, and a couple of commands ("t", and "m", which are
beyond the scope of the current parser) are missing.  for the
same reasons, it also won't fully parse existing .exrc files,
since i don't really think that's very important -- it does
simple ones, but more sophisticated one's need some tweaking.
when you toss vile's built-in command/macro language, you quickly
forget you ever cared about .exrc.

<p>just for bragging rights, i think vile had X11 support earlier
than the others, thanks to work by Dave Lemke from NCD, and
Keving Buettner who made it <em>really</em> functional.  i take
no credit -- i never use xvile.  on the other hand, vile wasn't
real useful under DOS, since it doesn't use a swap file, and the
memory limits got in the way pretty quickly.  (of course, this
isn't a practical problem under real OSes.)

<p>unfortunately, since none of the "vi rewrite" authors were
collaborating much in the early years (if we knew about one
another at all :-), i think we all made different choices for the
extension commands.  vile tends to follow an emacs-like model,
and uses ^X and ^A as built-in (but rebindable, of course)
command prefixes, and indeed uses emacs bindings directly for
some commands: like ^X-2 to split a window in half.

<p>another typical difference: i insist that ":q" should quit the
editor, and not just close the current window.  both nvi and vim
got this wrong, imho.

<p>another one: vile does infinite undo the way nvi does, and not
the way vim does.  small differences, but ones that can make a
user prefer one over another.

<p>as someone else said in this thread -- if you're choosing a new
version of vi, you owe it to yourself to try them all, for half
an hour of real work with each, and make your choice based on
that.  vim has lots and lots of support, and having this nice
"comp.editors.vim" newsgroup helps :-), but the others have
things to offer too, and you might like one of the others better.
i do.  ;-)

<p>btw, i'm only peripherally involved in vile maintenance anymore
-- Tom Dickey does most of it (thanks tom) these days -- i just
run the mailing lists.

<p>current versions can be had from: ftp://ftp.clark.net/pub/dickey/vile

<p>paul

<p>paul fox, pgf@foxharp.boston.ma.us<br>
(arlington, ma, where it's 23.5 degrees)
</blockquote>

<p>Steve Kirkendall's Elvis editor has also been updated
recently.  The X version, like vim's, has good syntax-highlighting
support, and also like vim, the windows (95/nt) version is
well-supported, for those users who need to work in that
environment.  I confess I haven't spent as much time with elvis
as I have with vile and vim; perhaps another user might care to
contribute? 

<p>XEmacs development continues apace.  Versions 19.16 and 20.3
are available (from <a href="ftp://ftp.xemacs.org">the home
site</a> and its mirrors) but one of the most interesting
developments is taking place in the 20.5 series of betas.

<p>A common complaint about XEmacs is its bulk and lengthy
loading time.  A full distribution is huge, with many bundled
packages for which most users have little use.  Trying out a new
version was not to be undertaken lightly, as the download time
was long and a large block of disk space needed to be available
for compilation.  The XEmacs team is in the process of unbundling
packages, which are now available individually.  The base source
archive is now around eight megabytes, while the compiled LISP
(*.elc) archive is only one and one-third megabytes.  The
packages are independent, and when this beta of XEmacs is
compiled it finds whichever packages you have installed and loads
their documentation, menu-items, and keybindings.  The package
subdirectory is independent of the version-specific binary and
LISP directories, so unchanged package files need not be
downloaded when upgrading to a new XEmacs version. The easiest
way to try this out is to compile the base source archive without
any packages installed and see what doesn't work.  Then packages
can be incrementally installed until the desired functions are
once again available.  After a new package has been unpacked, the
/lib-src/DOC file should be deleted.  Run <b>make</b> again and
the new package should be found and incorporated into the editor.
In other words, it's a good idea to keep the built source-tree on
your disk until you've generated an XEmacs which meets your
particular needs.  Of the subset of the available packages which
I installed, only the Ediff package initially failed to work, but 
after some experimentation I found that the line <br>
<kbd>(require 'ediff-hook)</kbd><br>
in the XEmacs init file caused it to be loaded.

<p>The release version of 20.5 should be available in the late
spring of 1998.

<p>A new version of NEdit has been released recently.  NEdit has
become popular with programmers and general users due to its
nicely-designed interface, equally-useful mouse and keyboard
control, and relatively small size.  Version 5.0 adds very
configurable (via dialog-boxes) syntax-highlighting and a new
macro language.  It's one of the easiest editors to learn, and
it's nearly as powerful as Emacs without being as large and
memory-hungry.  If you like mouse-based editing, the ability to
highlight a selection and drag it to another location in the file
will be appealing.  This function isn't found, as far as I know,
in any other editor available for Linux. 

<p>NEdit is strictly X-based; if you like to edit in a console
session (admittedly a minority view these days) this editor may
not be to your taste.

<p>There are now two versions available: the main
version is maintained by Mark Edel at Fermi National
Laboratories, and both source and binaries are available from
<a href="ftp://ftp.fnal.gov/KITS/pub/nedit/v5_0">ftp.fnal.gov</a>,
the home site.  Max Vohlken has made a number of patches to NEdit
5 which for various reasons haven't been accepted into the main
distribution.  He has been packaging his patched version into an
alternate release, and it can be also obtained from the above
site, in the <b>/KITS/pub/nedit/v5_0/contrib/max/5.0</b>
directory.  Both versions have adherents, it seems. 
<hr>

<center><h3>File-Managers</h3></center>

<p>Christian Bolik recently released the first new version of the
desktop- and file-manager TkDesk in nearly a year.  Version 1.0b5
has some nice new features (check out the Be-style icon-bar!),
and is well worth looking into.  This beta is supposed to be the
last; as soon as [incr tcl] (an object-oriented extension of Tcl) is
updated to work with Tcl8.0, TkDesk will also be able to make use
of the latest Tcl/Tk releases.  The TkDesk web-page has recently
become inaccessible, but the new version is still in Sunsite's
/pub/Linux/Incoming directory.

<p>Henrik Harmsen's FileRunner is now (with version 2.4.1) a GNU
General Public License application, which means that it will be
more easily included in distributions such as RedHat and Debian.
FileRunner is small, quick, and efficient, and if you have
installed Tcl/Tk 8.0 you should give it a try.  It can be
obtained from
<a href="http://www.cd.chalmers.se/~hch/filerunner.html">this site.</a>

<p>The Midnight Commander, the versatile text-mode
file-and-archive-manager, is still under continual development.
Beta 4.1.19 is the latest beta, and although none of the
X-windows versions are yet ready for prime-time, these recent
betas are well worth installing, as useful new features are
continually added.  Source (which generally will compile without
a hitch) is available from
<a href="ftp://ftp.nuclecu.unam.mx/pub/Midnight/devel">this site.</a>

<p>I must confess that the numerous icon-based file-managers,
many of which have been released or updated lately, don't really
suit my needs.  Several are based on the venerable xfm manager,
or its (apparently abandoned) successor moxfm.  Surely one of you 
readers out there prefers this type of file-manager?  Why not
write an article or review for the Gazette?  There's room here
for all sorts of views, after all!   

<center><h3>Xlock and XScreensaver</h3></center>

<p>Jamie Zawinski is a programmer and hacker currently working
for Netscape.  He has written several useful free software
programs, including xkeycaps and several of the screensaver modes
included with both Xlockmore and XScreensaver.  He also was
involved in the early development of Lucid Emacs (an ancestor of
XEmacs), and has contributed to the development of many Emacs
packages including the Fontlock highlighting mode.  I recently
received this message from him:<br>

<p>Date: Sat, 29 Nov 1997 20:20:12 -0800<br>
From: Jamie Zawinski &lt;jwz@netscape.com&gt;<br>
Organization: Netscape Communications Corporation, Mozilla Division<br>
X-Mailer: Mozilla 3.02 (X11; U; IRIX 6.2 IP22)<br>
To: gazette@ssc.com<br>
CC: layers@marktwain.net<br>
Subject: xlockmore and xscreensaver<br>

<p>Dear Linux Gazette folks,

<p>I saw the article on Xlockmore by Larry Ayers in issue 18 of
the Linux Gazette, and I was surprised that it didn't mention,
even in passing, my XScreenSaver program!

<p>Allow me to engage in a bit of advocacy.

<p>Back in 1991, before Xlockmore existed, there was only Xlock.
Xlock was not a screensaver: it was only a locker.  There was no
way to make it activate itself automatically when the console
became idle, nor was there any way to avoid having it lock the
screen: that is, there was no way to have it turn off when the
mouse moved.

<p>So, I wrote XScreenSaver.

<p>XScreenSaver is superior to Xlockmore in a number of ways.
The most important way, of course, is that it is actually a
*screen saver*.  Although Xlockmore can be configured to not
require a password, it still doesn't have the ability to turn on
when the machine is idle; for that you have to use an external
program that launches and kills it.

<p>The second way in which XScreenSaver is better is that it
takes a server/client approach: the "xscreensaver" program itself
knows how to detect idleness, and to lock the screen.  The
graphics hacks are not built in: the beauty of XScreenSaver is
that any program which can draw on the root window can be
launched by XScreenSaver for use as a graphics hack!  This has
several benefits:

<ul>
  <li>You don't have to recompile and reinstall xscreensaver to
      install a new graphics hack: all you have to do is change your
      X resources, and issue one command.

  <li>Since programs don't have to be written *specifically* to run
      inside the xscreensaver framework, there are many more potential
      graphics hacks available.  They don't even need to be written in
      the same language: they just have to draw on the root.  Thus,
      it's easier to write programs to work with XScreenSaver than with
      Xlock or Xlockmore, because they don't have to follow a complex
      set of idiosynchratic rules on how to structure the code: the
      only rule is, "draw on the root."

  <li>By separating the task out into two processes, the whole
      system becomes more robust: the memory protection provided
      by the OS serves us well, in that, if one particular
      graphics hack has a bug (leaks memory, corrupts memory, gets
      a floating-point exception, etc) the integrity of the screen
      saver itself is not compromised.  The offending hack may
      exit, but the screen saver itself is still running, and the
      screen is still blackened (or locked.)  Also, since a screen
      saver is, by its nature, a very- long-running background
      task, even a small leak would build up over time.  By
      arranging for the graphics hacks themselves to be relatively
      short-running tasks, this problem goes away.

  <li>On some systems, only programs which are running as root can
      check passwords.  Therefore, on such systems, a screen
      locker would need to be a setuid-root program.  Obviously
      one needs to be very careful about what programs one allows
      out of the security sandbox; a conscientious sysadmin would
      want to examine such a program very carefully before
      installing it.  The XScreenSaver model allows this, by
      having the priveleged part of the program (the saver itself)
      be small, while letting the larger part (the graphics hacks)
      remain unpriveleged.
</ul>

<p>XScreenSaver also includes a nice Demo Mode that lets the user
interactively experiment with the currently-configured graphics
hacks.  (Until recently, most Linux users wouldn't have been able
to take advantage of this, since the code had required Motif; but
that is now configurable, and demo mode works with Athena widgets
too -- since release 1.27 back in January 1997.)

<p>If you have a system with more than one monitor, XScreenSaver
can save them both at once: a different graphics hack will run on
each, and if the two monitors have different depths (for example,
if one is monochrome and the other color) they can be configured
to choose their screenhacks from different lists, so that each
monitor is running the hacks that look best on it.

<p>Most of the xlockmore hacks (the ones that I liked, anyway,
including the GL modes) are included with the XScreenSaver
distribution; the only change made being to extract the various
display modes from the monolithic XLock executable, and turn them
into standalone root-window-oriented programs.

<p>However, it's possible to have XScreenSaver run xlock itself, as just
another one of its many modes -- the best of both worlds!

<p>Do check it out: the canonical web page is
&lt;http://people.netscape.com/jwz/xscreensaver/&gt;, which
includes screen shots and descriptions of most of the included
graphics hacks.

<p>The latest version, as of this writing, is 2.12.  At last
count, it came with 64 different graphics hacks.  Roughly a third
of these were written by me; the others were graciously
contributed by others.

<p>And, of course, it's all free, under the usual
X-Consortium-style copyright.

<p>You also might enjoy my philosophical rambli ngs on the nature
of screensavers, at
&lt;http://people.netscape.com/jwz/gruntle/savers.html&gt;.


<p>Jamie Zawinski&nbsp;&nbsp;&nbsp;http://people.netscape.com/jwz/
&nbsp;&nbsp;&nbsp;&nbsp;about:jwz
<hr>

<center><h3>The Gimp</h3></center>

<p>Since I last wrote about the <b>G</b>nu <b>I</b>mage
<b>M</b>anipulation <b>P</b>rogram (in LG #18) both the GTK
toolkit (the underlying programming framework of the Gimp) and
the Gimp itself have undergone several revisions.  The
long-awaited version 1.0 still hasn't been released, but may have
been by the time you read this.  There has been talk of a release
by Christmas.

<p>There's really no reason to wait for a non-beta release,
though, as the version available as of mid-December is very
useful and impressive.  Some incredible new plug-ins are bundled
with version 19.16, and general stability has been much
improved.  A useful feature for new users has been added: at
start-up a small window appears which contains a different usage
tip at each invocation.  This can be disabled at any time.  One
caveat: be sure to obtain the corresponding version of GTK (in
this case gtk+-0.99.0), as unlike some earlier versions it is no
longer bundled with the Gimp.

<p>Here are brief descriptions of some of the new plug-ins:<br>

<center><h4>Iwarp</h4></center>

Some plug-ins are very useful, but tend to be taken for granted,
such as the various blurring or image-format modules.  Then there
are plug-ins which, though not immediately useful, are
fascinating due to the unexpected and interesting changes they
can wreak upon an unsuspecting image. The Iwarp plug-in,
as an example.

<p>I admit I've never used Adobe's Photoshop and the many commercial
plug-ins available for it.  Therefore my initial reaction
(composed of equal parts of awe and wonder) to this plug-in may
seem a bit naive, as there are several commercial extenders for
Photoshop with similar capabilities.  Be that as it may, clicking
the mouse pointer on an image thumbnail and actually stirring and
shifting pixels interactively is quite amazing.

<p>A screenshot will give you an idea of the nature of the
interface and the options available:<br>

<p>
<center><img alt="the Iwarp plug-in" src="./gx/ayers/iwarp.gif"></center>

<p>The plug-in offers a choice of six different methods of
changing an area of pixels in an image: clock-wise rotation,
counter-clockwise rotation, growing, moving, shrinking, or
removing.  Playing around with this plug-in will give you a good
idea of its capabilities.  Try setting it to one of the rotation
options, then hold the first mouse button down as you slowly move
it across an image.  It's as if a miniature hurricane is
travelling across the image, leaving spirals of distortion in its
wake.  I imagine that a drawing tablet would be handy to
use with this plug-in, allowing more precise control than that
provided by a mouse.

<p>Like icing on a cake, Iwarp has animation capabilities
built-in.  Once you have warped an image to your satisfaction,
select the animation tab in the plug-in's window; this lets you
choose how many frames to create, and whether to make them cycle
repeatedly (the ping-pong effect) or just play from start to
finish.  Each frame is saved in a separate layer, and there is a
convenient plug-in called Animation Playback which will let you
view it.

<p>So what's the use of this?  You can use it to create animated
GIF files for web-pages, or perhaps tweak a small area of an
image, but mostly it is just a lot of fun!

<center><h4>Flame and Fuse</h4></center>

<p>Gimp 0.99.16 must be something of a milestone for Scott
Draves, creator of the Flame and Fuse plug-ins (as well as the
Bomb interactive screen hack). Though successive versions of the
Flame plug-in have been available for some months now, the
maintainers of the Gimp have been reluctant to include it in the
Gimp distribution due to certain licensing restrictions which
Scott had placed on the program and its output.  Recently Scott
relaxed those restrictions and Flame is now a part of the Gimp.

<p>Flame is similar in some ways to the IFS-Explorer plug-in, in
that is based on Iterated Function Systems fractal algorithms,
but the approach and interface are different.  Rather than
manipulating three triangles, which is the traditional IFS
interface used by IFS Explorer, Flame does much of its work
"behind the scenes", though there are still several options
available to the user.  One nice feature is the built-in support
for the Gimp's color gradients.  Several of Scott Draves' own
gradients are included in the plug-in, but any others can be
entered into an entry-field in the plug-in window.  Here's a
screenshot of a typical window:<br>

<p><img alt="Flame Window" src="./gx/ayers/flame.gif">

<p>Flame can generate some really intriguing images; some of
Scott Draves' examples can be seen on
<a href="http://www.cs.cmu.edu/~spot/flame.html">this web
page</a>.  If you are using an earlier Gimp version, a binary of
the plug-in has been thoughtfully included in the Flame archive
file available from the page.  Just drop the binary into your
Gimp plug-in directory; the next time you start the Gimp Flame 
should be accessible from the "Render" sub-menu.

<p>It's interesting to compare the results obtainable from Flame
and the IFS-Explorer plug-ins, as they both are based on the same
mathematical principles but have such different methods of
implementing them.

<p>Another plug-in from Scott Draves is called Fuse.  This one is
used to disassemble a pair of images and merge them into one,
using what seems to be some sort of AI trial-and-error process.
A preview window shows the various attempts in real-time, which
can be interesting to watch.  The process is time-consuming, as
the plug-in seems to be repeatedly dissatisfied with its results,
and will back up to a previous branch in the process and start
anew.  Scott Draves has achieved some interesting results with
Fuse, which can be viewed on this 
<a href="http://www.cs.cmu.edu/~spot/fuse/index.html">web-page</a>.
It would take some practice to gain proficiency with this plug-in;
this is one of those applications which may require reading the
source code to get a feel for just what is going on behind the
scenes.  In other words, no on-line help!

<center><h3>Illusion</h3></center>

<p>The Illusion plug-in is another interesting one to experiment
with.  It was written by Hirotsuna Mizuno, a Japanese
programmer.  What this one does is difficult to describe; it
seems to duplicate an image and tile a new one with "faded-out"
copies of the original.  This results in a surrealistic sort of
pattern, and could be useful in creating watermark-like
backgrounds.  A before-and-after pair of screenshots should
convey an idea of its capabilities:<br>

<p><center><img alt="Illusion #1"
src="./gx/ayers/illusion.gif"></center>

<p><center><img alt="Illusion #2"
src="./gx/ayers/illusion2.gif">
</center>
<hr>

<center><h3>Map-Object</h3></center>

<p>The Map-Object plug-in, though included with 19.15,
unfortunately wasn't supplied with the 0.99.16 release.  It is
being developed by Tom Bech, of the University of Bergen in
Norway.  This plug-in will map or project an image onto the
surface of either a sphere or a skewed plane, with full control
of many parameters such as the light source's orientation and
color.  The background can easily be set to be transparent, which
makes the output useful in HTML files.  If you are still using
version 19.15 of the Gimp the current version is functional.
Perhaps by the time Gimp 1.0 is released Mr. Bech will find time
to adapt this ingenious plug-in to the rapidly-changing Gimp/GTK
environment.

<p>Just as I was finishing this article Gimp 0.99.17 was
released, and Map-Object has been reinstated into the
distribution.  A new version of GTK was released concurrently;
visit <b>ftp.gimp.org</b> if you'd like to obtain the
source. Debian and Redhat packages of these releases are also
available there.

<p>This is just a sampling of the more than sixty plug-ins
bundled with the 19.16 release; more are appearing regularly, and
when the 1.0 release is completed (and development of the Gimp
moves on to a new beta version) the resulting "fixed target"
should make developing new plug-ins easier for programmers.


<!-- hhmts start -->
Last modified: Sun  4 Jan 1998
<!-- hhmts end -->

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Larry Ayers <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./ayers.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./moore.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->
<P><I>[A reader requested this article by Gary Moore from the <A HREF="http://www.ssc.com/lj/issue36/index.html">April
'97</A> issue of <A HREF="http://www.ssc.com/lj/index.html">Linux
Journal</A>. --Editor]</I>
<P> <HR> <P> 
<center>
<H1>Product Review: Applixware</H1>
<H4>by Gary Moore</H4>
</center>

<P> <HR> <P> 
<ul>
<li>Product:	Applixware 4.2 For Linux
<li>Publisher:	Red Hat Software, Inc.
<li>Phone:	800 454-5502
<li>Fax:	203 454-2582
<li>WWW:	http://www.redhat.com/
<li>Price:	USD $495, student price USD $79.95
</ul>

<P> <HR> <P> 


<P>Applixware is is an excellent "office suite"
that may open doors to wider use of Linux.

<P>Applixware features a word processor, a spreadsheet, a presentation
graphics tool, a drawing tool, an e-mail client, database
connectivity and an object-oriented application builder. For some
time, this professional set of programs has been available for other
Unix platforms, including HP-UX, Solaris, AIX and Digital Unix,
and now Applixware is available for Intel-compatible Linux machines and Microsoft
Windows; at the time of this writing, the NT version is out and the 95
version is in beta testing.

<P><CENTER><IMG SRC="./gx/moore/0202f1.gif"></CENTER> 
<P><CENTER><B>An Applixware On-Line Book</B></CENTER>

<P>If you install Applixware on your system, you'll notice an impact
on system resources. A complete installation with the included Red Hat
RPM files requires 210MB--if that's more than you have available,
you can make a partial installation from a live,
"unpacked" directory on the CD-ROM. In fact, Applixware
can be launched and used directly from the CD-ROM, though this
makes program operation a little leisurely. I was
using Red Hat Linux 4.0 when I reviewed Applixware,
but the software should work fine on other
distributions, and installation instructions are
included.

<P>The CD speed may not seem bad if you're using a 486DX25, on which
Applixware is fast enough to be usable, but probably too slow for a
production environment; I found my meager CPU power to be a real
problem only when I started using the graphics tools.

<P>This is not an application for low-memory systems. As
cheap as RAM is today, this shouldn't be too painful a state to
rectify. With 16MB of RAM, the word processor was snappy enough with
X and the Afterstep window manager running, but having much else
loaded caused so much paging of virtual memory I needed something to
read while waiting.

<P><CENTER><IMG SRC="./gx/moore/0202f2.gif"></CENTER> 
<P><CENTER><B>Applix Words</B></CENTER>


<P>Not much reading material comes with Applix--at least, not on
paper. Back when it was known as Asterix and also in version 3.x of
Applix, there was a manual for each module, but either with the Linux
version or with the later releases, virtually all documentation is in
the "On-Line Books". Use the on-line tutorials if you're
new to the system, or the on-line help if you just need a reference.

<P><I>Applix Words</I> is a full-featured word processor with
everything you'd expect to find in a modern product. That is, unless
you're looking to do something which really should be done
using desktop publishing software. By the way, one thing you
never want to do with it is embed, oh, 80 or so large,
256-color GIFs in a single document--at somewhere around 8MB,
application behavior gets a bit wacky. Linking is much,
much better.

<P><I>Words</I> gives you tables, borders, shading, embedded equations and
calculations, conditional text and cross-referencing, international
dictionaries, thesauri and a multi-font, multi-size WYSIWYG
display. You can rely on multiple undo and redo, and when you're done,
you can save PostScript and PCL printer files or send them directly to
a networked printer.

<P><CENTER><IMG SRC="./gx/moore/0202f3.gif"></CENTER> 
<P><CENTER><B>Applix Graphics</B></CENTER>

<P>HTML is easy with the Applix HTML authoring tool. Documents can be
imported from Applix or another popular word processor using one of
the format filters or created from scratch with the same ease as a
word processing document. Clip art, GIFs and linked or embedded
Applix Graphics images are converted seamlessly. <I>Applix
Spreadsheets</I> documents and queries from the database interface
application, <I>Data</I>, can be included, too. Tables, colors, and
more than 25 standard HTML styles are all under your control.

<P><I>Applix Graphics</I> is a terrific drawing and presentation graphics
tool. At your disposal are user-definable fill patterns, various
brush styles, shearing, drop shadows, incremental zoom, rotating,
scaling, color pixel editing and text wrapping, to name a few. Grid
snap, guide lines, rulers, and coordinates help create precise and
complex drawings quickly. I found graphics as easy to
produce with <I>Graphics</I> as with <I>Powerpoint</I>.

<P>The good news continues with <I>Applix Spreadsheets</I> with
calculation-based attributes, 3D charts, named views and dynamic
links to objects in other Applixware applications. When your linked
data from elsewhere changes, it is automatically updated in your
spreadsheet. There are live links to a relational
database through <I>Applix Data</I>, goal seeking, drag-and-drop,
projection tables and background recalculation. You can import those
old Lotus 1-2-3 and Excel spreadsheets, too.

<P>You might not think you need another mail client, but check out
<I>Applix Mail</I>. When you receive mail, a dialog box pops up with
the sender name and subject, giving you the options "Read
Now", "Read Later", and "Help". You can
attach Applix files to your mail messages and upon receipt, launch
the appropriate Applix tool for viewing. Mail can be marked
"Urgent", marked with a "Reply by" date, and
also sent by "certified" mail, giving you a receipt when the
recipient has read the mail. Of course you can "Cc" and
"Bcc" people. You also get shared mail folders, automatic
conversion of messages and documents to your preferences, encryption,
and mail filtering based on rules you specify.

<P><I>Applix Data</I> connects Applixware applications to SQL databases
like Informix, Oracle, Ingres, and Sybase, seamlessly querying data
from one or more tables, selecting information with query conditions,
and performing advanced queries and joins. Rows can be edited,
inserted, and deleted. A live link in your document to the database
means up-to-date data. <I>Data</I> provides a lot of capability when
teamed with ELF and <I>Builder</I>.

<P><CENTER><IMG SRC="./gx/moore/0202f4.gif"></CENTER> 
<P><CENTER><B>Applix Builder</B></CENTER>

<P>The Extension Language Facility (ELF) is an interpreted language with
which users can build and deploy applications, front-ends to
applications, automate tasks and connect to databases and other
external sources of data. The Applix user interfaces are built with
ELF and ELF macros can be used to automate tasks in any of the
Applixware applications. Some capabilities include: TCP/IP socket
interfacing, remote procedure calls, interactive debugging, many
built-in macros, string manipulation, and arithmetic and Boolean
operators.

<P><I>Builder</I> is object oriented and gives you access to external data
sources as well as the capabilities of the Applixware application
suite for use in your custom applications. Also, full access to ELF
macros and functions, external objects, shared classes, RPC and shared
library support. Plus, the applications you develop in <I>Builder</I>
on one platform are portable to Applixware on other platforms without
modification.

<P>Applixware is a terrific package. When I heard it was available for
Linux, I knew I could let go of Microsoft Office (and MS Windows) forever. 

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Gary Moore <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./ayers2.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./berglund.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>A Bit About Security</H2>
<H4>By <a href="mailto:mabs@ancc.com.au">Marcus Berglund</a></H4>
</center>
<P> <HR> <P>  
If you are a potential website/permanent connection, the first thing you
should know about is security...
<P>
I, from personal experience know what happens when people 'hack' into my
machine, it nearly become an international court case.  I won't go into
details, but it was from my ignorance, and is why I lost my job.
<P>
When setting up a machine you should have a guess who might be able to
access you machine, and when you setup a new user, eg. to get pirated
programs, they'll know how to get in. Sure, you might be able to get free
programs and people might look at you in a different way, but if someone
with more experience than you (and there is always alot of them, no matter
how good you are) sees an obvious security hole they will exploit it as
much as they can, so they don't get in trouble and you do.
<P>
Linux/Unix is a very flexible/Configureable OS and thats where security
holes apear, and disapear.  Just ask a system administrator, most Linux
distributions need some work before they are close to internet useable, or
hack proof.  I personally couldn't list every file you would need to edit,
but startup files (or links with redhat & debian) you will need to
remove, if you don't use them, and /etc/inetd.conf is another place to 
start, if you don't understand these files, imidiately remove network
connection, and read man pages!!!
<P>
A basic checklist might be: time, echo, nfs*, telnet*, smb (netbios), ftp,
login, pop3, nntp, tftp*, netstat, finger, http, etc... (* these are
popular protocols, but are can be very insecure), if you are on a network
and are unsure, ask your sysadmin, they will most certainly know more from
experience what you should and shouln't use, and most (experienced with
Linux) could probably give you some good advice...
<P>
At this stage you've gone through and remove unecessary services, now
restart your config files ('shutdown now' and login then as root then 
'init 3' or restart (better ideas - send them in)), now you learn how the
protocols work, what files they access, and what security holes they
leave, eg. if you have people that are only using windows to share drives
you might set them up in a group that has no telnet and ftp access (for
example).
<P>
Adding new users should never be as easy as it seems, unless you can trust
the person, eg. I have an 'smb' group on my machine for samba users, and
they are denied access through telnet and ftp, since they are they only
other services I offer on my machine.  When working out what people have
access to what, plan what you are going to do, eg. restrict certain
'groups' access to paticular services.
<P>
At this stage you are probably thinking, "What alot of stuffing around",
but as an 'NT ISP' recently proved to me, even they are succeptable to
incorrect user access attacks, so don't say that it is only resricted to
the Unicies, all OS's suffer, it's just that Unicies can be a little
harder to configure than NT, and can be attacked easier by very
experienced Unix hackers, as NT with NT hackers...
<P>
But probably the biggest advantage to Linux is that 99% of the time you
can get the source code and, I ask one question, if you gave away the
source code for a program, are you going to leave obvious security holes
for personal access, I think not...
<P>
It all mainly comes down to asking the computer, people on the internet
and sysadmins what you should and shouldn't do, and a little common sense
does help alot too, and have fun in the meanwhile.

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Marcus Berglund<BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./moore.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./rogers.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>The Standard C Library for Linux, Part one: &lt;stdio.h> file functions</H2>
<H4>By <a href="mailto:jrogers@acmewidgets.com">James M. Rogers</a></H4>
</center>
<P> <HR> <P>  
C is a very small language.&nbsp; This is a good thing.&nbsp; C programmers
will use nearly the entire C language every time they write a fair sized
program.&nbsp; The standard C library extends the functionality of C in
a way that is predictable on multiple systems.&nbsp; The library gives
us tools like scanf() and printf() that make reading and writing formatted
output much easier than working with blocks of characters using read()
and write().&nbsp; Also when you move from one C programming environment
to another, the functionality of printf() will be the same.&nbsp; You don't
have to relearn how to print formatted output every time you change machines.

<P>In this series of articles I will discuss the tools that are available
for the programmers in the standard C library.&nbsp; At the end is a bibliography
of the books and articles that I used to get this information.&nbsp; I
refer to these books and magazines on a daily basis when I program.&nbsp;
If you want to work as a C programmer I strongly recommend that you buy
and read these books and magazines.

<P>Many times the standard functions are overlooked and reinvented by programmers
(including myself!) to do things like seeing if a character is a letter
by:

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (c=>'a'
|| c&lt;='z' &amp;&amp; c=>'A' || c&lt;='Z')

<P>instead of using

<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isalpha(c);

<P>The second form is much easier to read and figure out.&nbsp; There is
another reason to use the second form.&nbsp; The first example only works
for ASCII character sets, the second will work on _any_ machine.&nbsp;
If you want to write portable code (code that can be compiled and ran on
any machine with very minor changes) then use the standard C library.

<P>Several times in the past I have written code that took time to write
and debug and interface to the rest of my program only to discover that
there was already a function that did what I wanted to do.&nbsp; A few
months ago I was writing my own Multi User Dimension (MUD), based on a
client/server article in Linux Journal, and I needed to process what the
user had entered, one word at a time.&nbsp; So I wrote my own string tokenizer.&nbsp;
Turns out I could have used the strtok() function to do almost the exact
same thing.&nbsp; And other people will know what the strtok() function
does without having to decipher my code.

<P>Make your life easier, use the standard C library.&nbsp; It will also
help all of us who try to update and maintain your code later.

<P>The GNU compiler, gcc, comes with the GNU standard C library.&nbsp;
This compiler is one of the best in the world and the GNU standard C library
conforms almost exactly to the standard.&nbsp; In the places where the
standard is imprecise, you can expect very reasonable behavior from both
the compiler and the library.&nbsp; I am going to discuss the GNU standard
C library in these articles.

<P>The &lt;stdio.h> library handles the standard input and output functions
for C programmers.&nbsp; It is also by far the largest library.&nbsp; Because
the library is so large I am going to group the commands in these sections:&nbsp;
file operations, input and output.

<P>Now before we talk about files we need to agree on the words that we
are going to use.&nbsp; In Linux a file or device is considered to be a
<B>stream</B> of data.&nbsp; This stream of data that is associated with
a file or hardware device is accessed by your program <B>opening</B> the
file or device.&nbsp; Once the stream is opened then you can <B>read</B>
and/or <B>write</B> to it.

<P>Three streams are opened automatically when you execute a program.&nbsp;
Standard input (<B>stdin</B>), standard output (<B>stdout</B>), and standard
error (<B>stderr</B>).&nbsp; These can all be redirected by your shell
when you run the program but normally stdin is your keyboard and stdout
and stderr both go to your monitor.

<P>After you are done with your streams you need to tell the operating
system to clean up buffers and finish saving data to the devices.&nbsp;
You do this by <B>closing</B> the stream.&nbsp; If you don't close your
stream then it is possible to lose data.&nbsp; stdin, stdout and stderr
are all closed automatically the same way they are opened automatically.

<P>One of the most important things to remember when dealing with devices
and files is that you are dealing with the real world.&nbsp; <I>Don't assume
that the function is going to work.</I>&nbsp; Evan something like printf
can fail. Disks fill up or occasionally fail, users input the wrong data,
processors get too busy, other programs have your files locked.&nbsp; Murphy's
Law is in full effect when it comes to computer systems. Every function
that deals with the real world returns an error condition if the function
failed.&nbsp; Always check every return value and take the appropriate
action when there is an error condition.&nbsp; <I>Exceptions are not errors
unless they are handled badly.</I> <I>Exceptions are opportunities for
extra computation</I> (William Kahan, on exception handling.)

<P>The first example is to basically show how to open a file for reading.&nbsp;
It just dumps a file called test in the current directory to the standard
out.&nbsp; All exceptions are reported to standard error and then program
halted is with an error return.&nbsp; It should produce an error if a file
called test doesn't exist.

<P>--------------------------------------------------------
<BR><TT>#include &lt;stdio.h>&nbsp;&nbsp;&nbsp; /* this is a compiler directive
that tells the</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
the compiler that you are going to be using</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
functions that are in the standard input /</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
output library</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
*/</TT>
<BR><TT>main (){</TT>

<P><TT>/* declare variables */</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; FILE *stream;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/* need a pointer to FILE for the stream */</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; int buffer_character;&nbsp;&nbsp;&nbsp; /* need
an int to hold a single character */</TT>

<P><TT>/* open the file called test for reading in the current directory
*/</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; stream = fopen("test", "r");</TT>

<P><TT>/* if the file wasn't opened correctly than the stream will be</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; equal to NULL.&nbsp; It is now customary to
represent NULL by casting</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; the value of 0 to the correct type yourself
rather than having the</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; compiler guess at the type of NULL to use.</TT>
<BR><TT>*/</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; if (stream == (FILE *)0) {</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, "Error
opening file (printed to standard error)\n");</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit (1);</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; /* end if */</TT>

<P><TT>/* read and write the file one character at a time until you reach</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; end-of-file on either our file or output.&nbsp;
If the EOF is on file_descriptor</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; then drop out of the while loop. if the end-of-file
is on report write</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; errors to standard out and exit the program
with an error condition</TT>
<BR><TT>*/</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; while ((buffer_character=getc(stream))!=EOF)
{</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* write the character
to standard out and check for errors */</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((putc(buffer_character,
stdout)) == EOF) {</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fprintf(stderr,"Error writing to standard out.&nbsp; (printed to standard
error)\n");</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
fclose(stream);</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
exit(1);</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}&nbsp; /* end if */</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; /* end while
*/</TT>

<P><TT>/* close the file after you are done with it, if file doesn't close
then report and exit */</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; if ((fclose(stream)) == EOF) {</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error
closing stream.&nbsp; (printed to standard error)\n");</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);</TT>
<BR><TT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; /* end if */</TT>

<P><TT>/* report success back to environment */</TT>
<BR><TT>&nbsp;&nbsp;&nbsp; return 0;</TT>

<P><TT>}&nbsp; /* end main*/</TT>
<BR>-------------------------------------------------------------
<BR>&nbsp;
<BR>The above simple program is an example of&nbsp; opening a file, reading
the file, and then closing the file while also using stdout, and stderr.&nbsp;
I cut and pasted the code to a vi session and then saved, compiled, and
ran the program.

<P>What follows is a quick summary of the <B>file operations</B> in the
&lt;stdio.h> library.&nbsp; These are the operations that work directly
with streams.
<H4>
Opening Streams</H4>
Before a stream can be used you must <B>associate</B> the stream with some
device or file.&nbsp; This is called opening the stream.&nbsp; Your program
is asking for permission from the operating system to read or write to
a device.&nbsp; If you have the correct permissions, the file exists or
you can create the file and no-one else has the file locked then the operating
system allows you to open the file and gives you back an object that is
the stream.&nbsp; Using this object you can read and write to the stream
and when you are done you can close the stream.

<P>Let me discribe the format of the descriptions that you will see here
and in the man pages.&nbsp; The first entry is the type that is returned
by the function call.&nbsp; The second part is the function name itself
and the third part is the list of variable types that the function takes
for arguments.

<P>Looking at the first line below we see that the fopen function takes
two pointers to strings, one is a path to a file and the other is the open
mode of the program.&nbsp; The function will return a pointer to FILE type
which is a complex object that is defined in the &lt;stdio.h> library.
So in order to accept the return type you must have declared a variable
of type pointer to FILE, like the stream variable in the example above
on line 9.&nbsp; On line 13 of the example you can see where I call the
function fopen with the static filename of "test" and a mode of "r" and
then accept the return value into the stream object.

<P>A stream can be opened by any of these three functions:

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; FILE&nbsp;&nbsp; *fopen( char *path,
char *mode)</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; FILE&nbsp; *fdopen( int fildes,
char *mode)</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; FILE *freopen( char *path, char
*mode, FILE *stream)</FONT></TT>

<P><TT><FONT SIZE=+1>char *path</FONT></TT> is a pointer to a string with
the filename in it.
<BR><TT><FONT SIZE=+1>char *mode</FONT></TT> is the mode of opening the
file (table follows.)
<BR><TT><FONT SIZE=+1>int fildes</FONT></TT> is a file descriptor which
has already been opened and whose mode matches.
<UL>You can get a file descriptor with the UNIX system function <B>open</B>.&nbsp;
Please note that a file descriptor is not a pointer to FILE.&nbsp; You
cannot close(stream), you must fclose(stream).&nbsp; This is a very hard
error to find if your compiler doesn't warn you about it.&nbsp; If you
are interested in Linux System calls type `man 2 intro`&nbsp; for an introduction
to the functions and what they do.</UL>
<TT><FONT SIZE=+1>FILE *stream</FONT></TT> is an already existing stream.

<P>These functions return a pointer to FILE type that represents the data
stream or a NULL of type <TT><FONT SIZE=+1>(FILE *)0 </FONT></TT>on any
error condition.

<P><B>fopen</B> is used to open the given filename with the respective
mode.&nbsp; This is the function that is used the most to open files.

<P><B>fdopen</B> is used to assign a stream to a currently opened file
descriptor.&nbsp; The file descriptor mode and the fdopen mode must match.

<P><B>freopen</B> is normally used redirect stdin, stdout and stderr to
file.&nbsp; The stream that is given will be closed and a new stream opened
to the given path with the given mode.

<P>This table shows the modes and their results:

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open stream for&nbsp;
truncate create starting</FONT></TT>
<BR><TT><FONT SIZE=+1>mode&nbsp;&nbsp; read&nbsp;&nbsp;&nbsp; write&nbsp;&nbsp;&nbsp;
file&nbsp;&nbsp;&nbsp;&nbsp; file&nbsp;&nbsp; position</FONT></TT>
<BR><TT><FONT SIZE=+1>----&nbsp;&nbsp; ----&nbsp;&nbsp;&nbsp; -----&nbsp;&nbsp;&nbsp;
----&nbsp;&nbsp;&nbsp;&nbsp; ----&nbsp;&nbsp; --------</FONT></TT>
<BR><TT><FONT SIZE=+1>"r"&nbsp;&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
n&nbsp;&nbsp;&nbsp;&nbsp; beginning</FONT></TT>
<BR><TT><FONT SIZE=+1>"r+"&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
n&nbsp;&nbsp;&nbsp;&nbsp; beginning</FONT></TT>
<BR><TT><FONT SIZE=+1>"w"&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp; beginning</FONT></TT>
<BR><TT><FONT SIZE=+1>"w+"&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp; beginning</FONT></TT>
<BR><TT><FONT SIZE=+1>"a"&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp; end-of-file</FONT></TT>
<BR><TT><FONT SIZE=+1>"a+"&nbsp;&nbsp;&nbsp; y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
y&nbsp;&nbsp;&nbsp;&nbsp; end-of-file</FONT></TT>

<P>To read the first line, "r" will open a stream for read, the stream
will not be opened for write, will not truncate the file to zero length,
will not create the file if it doesn't already exist and will be positioned
at the beginning of the stream.
<H4>
Stream Flushing</H4>
Sometimes you want your program to ensure that what you have written to
a file has actually gone to the disk and is not waiting in the buffer.
Or you might want to throw out a lot of user input and get fresh input,
for a game.&nbsp; The following two functions are useful for emptying the
streams buffers, though one just throws the data away while the other stores
it safely on to the stream.

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int fflush(FILE *stream)</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int fpurge(FILE *stream)</FONT></TT>

<P><TT><FONT SIZE=+1>FILE *stream</FONT></TT> is an already existing stream.

<P>These functions return a 0 on success.&nbsp; On a failure they return
an EOF.

<P><B>fflush</B> is used to write out the buffers of the stream to a device
or file.

<P><B>fpurge</B> is used to clear the buffers of unwritten or unread data
that is in a buffer waiting.&nbsp; I think of this as a destructive purge
because it clears the read and write buffers by dumping the contents.
<H4>
Closing Streams</H4>
When you are done with a stream you must clean up after your program.&nbsp;
When you close a stream the command ensures that the buffers are successfully
written and that the stream is truly closed.&nbsp; If you just exit a program
without closing your files then more than likely the last few bytes that
you wrote will be there.&nbsp; But you won't know unless you check.&nbsp;
Also there is a limit to how many streams a single process can have open
at one time. So if you keep on opening streams without closing the old
streams you will use up system resources.&nbsp; Only one command is used
to close any stream.

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int fclose(FILE *stream)</FONT></TT>

<P><TT><FONT SIZE=+1>FILE *stream</FONT></TT> is an already existing stream.

<P>Returns a 0 on success, or an EOF otherwise.

<P><B>fclose</B> flushes the given streams buffers and then disassociates
the stream from the pointer to FILE.
<H4>
Renaming and Removing Files</H4>
These two commands work just like rm and mv, but without the options.&nbsp;
They are not recursive but your programs can be so watch that you don't
accidentally build your own version of <TT><FONT SIZE=+1>rm -rf / </FONT></TT>&lt;&lt;&lt;by
they way don't type this, it would delete your entire harddrive!!>>>

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp; remove(char
*path)</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp; rename(char
*oldpath, const char *newpath)</FONT></TT>

<P><TT><FONT SIZE=+1>char *path, oldpath and newpath</FONT></TT> are all
pointers to existing files.

<P>Returns a 0 on success and a non-zero otherwise.

<P><B>remove</B> works just like rm to remove the file in the string pointed
to by path.

<P><B>rename</B> works just like move to rename a file from oldpath to
newpath, changing directories if need be.
<H4>
Temporary Files</H4>
You can create your own temp files by using the following functions:

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; FILE *tmpfile(void)</FONT></TT>

<P>This command returns a pointer to a FILE of stream which is a temp file
that magically goes away when your program is done running.&nbsp; You never
even know the files name.&nbsp; If the function fails it returns a NULL
pointer of type (FILE *)0.

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; char&nbsp; *tmpnam(char *string)</FONT></TT>

<P>This function returns a filename in the tmp directory that is unique,
or a NULL if there is an error.&nbsp; Each additional call overrides the
previous name so you must move the name somewhere else if you need to know
the name after you open the file.
<H4>
Stream Buffering</H4>
Normally a stream is block buffered, unless it is connected to a terminal
like stdin or stdout.&nbsp; In block buffered mode the stream reads ahead
a set amount a and then gives you what the input that you ask for as you
ask for it.&nbsp; Sometimes you want this to be bigger or smaller to improve
performance in some program.&nbsp; The following four functions can be
used to set the buffering type and the size of the buffers.&nbsp; The defaults
are normally pretty good so you shouldn't have to worry too much about
these.

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp; setbuf(
FILE *stream, char *buf);</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int&nbsp; setbuffer( FILE *stream,
char *buf, size_t size);</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int setlinebuf( FILE *stream);</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp; setvbuf(
FILE *stream, char *buf, int mode , size_t size);</FONT></TT>

<P>Where mode is one of the following:
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; _IONBF</FONT></TT> unbuffered,
output sent as soon as received.
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; _IOLBF</FONT></TT> line buffered,
output sent as soon as a newline is received.
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; _IOFBF</FONT></TT> fully buffered,
output isn't sent until size characters are received.

<P><B>setbuf</B> is an alias for&nbsp;&nbsp;&nbsp;&nbsp; <TT><FONT SIZE=+1>setvbuf(stream,&nbsp;
buf,&nbsp; buf&nbsp; ?&nbsp; _IOFBF&nbsp;&nbsp; :&nbsp;&nbsp; _IONBF, BUFSIZ);</FONT></TT>
<BR><B>setbuffer</B> is an alias for&nbsp; <TT><FONT SIZE=+1>setvbuf(stream,&nbsp;
buf,&nbsp; buf&nbsp; ?&nbsp; _IOFBF&nbsp;&nbsp; :&nbsp;&nbsp; _IONBF, size);</FONT></TT>
<BR><B>setlinebuf</B> is an alias for <TT><FONT SIZE=+1>setvbuf(stream,
(char *)NULL, _IOLBF, 0);</FONT></TT>

<P><B>setvbuf</B> sets a buffer for the given stream of size_t size and
of buffer mode.
<H4>
Stream Posistioning</H4>
Once you open a stream you are located at a certain postition depending
on what mode you opened the stream in, as you read or write your position
increases with each character.&nbsp; You can see where you are at in the
stream and jump to any position in the stream.&nbsp; If you are writing
a database program you don't want to have to read and ignore a million
characters to get to the record that you want, you want to be able to jump
right to the record and start reading.

<P>Note that terminals cannot have their stream repositioned, only block
devices (like hard drives) will allow this.

<P>Also note that if you open a file for writing and use fseek to go out
10,000 bytes, write one character and then close the file that you will
not have a file of 10,001 bytes.&nbsp; The file will be much smaller.&nbsp;
This is called a sparse file.&nbsp; If you move a sparse file using the
mv command it will not change size because a mv is only a change to the
directory structure, not the file.&nbsp; If you cp or tar a sparse file
then it will expand out to its true size.

<P><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp; fseek( FILE *stream,
long offset, int whence);</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; long&nbsp; ftell( FILE *stream);</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; void rewind( FILE *stream);</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int fgetpos( FILE *stream, fpos_t
*pos);</FONT></TT>
<BR><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int fsetpos( FILE *stream, fpos_t
*pos);</FONT></TT>

<P><TT><FONT SIZE=+1>FILE *stream</FONT></TT> is a pointer to an already
existing stream.
<BR><TT><FONT SIZE=+1>long offset</FONT></TT> is added to the position
indicated by the whence.
<BR><TT><FONT SIZE=+1>int whence </FONT></TT>is<TT><FONT SIZE=+1> SEEK_SET,
SEEK_CUR, or SEEK_END </FONT></TT>depending on where you want the offset
to be applied to:&nbsp; the beginning, the current position or the end.
<BR><TT><FONT SIZE=+1>fpos_t *pos</FONT></TT> is a complex file position
indicator.&nbsp; On some systems you must use this to get and set stream
positions.
<BR>&nbsp;
<BR>If these functions are successful <B>fgetpos, fseek, fsetpos</B> return&nbsp;
0,&nbsp; and&nbsp; <B>ftell</B> returns the current offset.&nbsp; Otherwise,
EOF is returned.&nbsp; There is no return value from <B>rewind</B>.

<P><B>fseek</B> sets the file position in the stream to the value of offset
plus the position indicated by the whence, either the begginning, the current
or the end of file to get the new position in the stream.&nbsp; This is
useful for reading along, adding something to the end of the stream and
then going back to reading the stream where you left off.

<P><B>ftell</B> returns the current position of the stream.

<P><B>rewind</B> sets the current position to the beginning of the stream.&nbsp;
Notice that no error code is returned.&nbsp; This function is assumed to
always suceed.

<P><B>fgetpos</B> is used like ftell to return the position of the stream.&nbsp;
The position is returned in the pos variable which is of type fpos_t.

<P><B>fsetpos</B> is used like fseek in that it will set the current postion
of the stream to the value in pos.

<P>On some systems you have to use <B>fgetpos</B> and <B>fsetpos</B> in
order to reliably position your stream.
<H4>
Error Codes</H4>
When any of the above functions return an error you can see what the error
was and even get a text error message to display for the user.&nbsp; There
are a group of functions that deal with error values.&nbsp; It is enough
for now to be able to see that you have an errors and stop.

<P>However, if you write a nice GUI word processor you don't want the program
to stop everytime it can't open a file.&nbsp; You want it to display the
error message to the user and continue.&nbsp; In a future article I will
deal this error code functions, or someone else can summarize them for
us and send in an article and some commented source code to show us how
it's done.

<P>If anyone is interested the functions are: <B>clearerr, feof, ferror,
and fileno.</B>
<H4>
Conclusion</H4>
Well that's enough for this month.&nbsp; I have learned a lot and I hope
you have as well.&nbsp; Most of this information is available through man
page system but the dates on these are 4 years old.&nbsp; If anyone has
updates on any of this information please send it to me and I will correct
myself in further articles.

<P>Next month I want to talk about input and output.&nbsp; I will take
the simple program above and add some functionallity to it to add a column
of numbers and output the results to standard out.&nbsp; Hopefully this
example program can grow into something useful.
<H4>
Bibilography:</H4>
<I>The ANSI C Programming Language, Second Edition</I>, Brian W. Kernighan,
Dennis M. Ritchie, Printice Hall Software Series, 1988

<P><I>The Standard C Library</I>, P. J. Plauger, Printice Hall P T R, 1992

<P><I>The Standard C Library, Parts 1, 2, and 3</I>, Chuck Allison, <I>C/C++
Users Journal</I>, January, February, March 1995

<P>STDIO(3), BSD MANPAGE, <I>Linux Programmer's Manual</I>, 29 November
1993

<P><I>Unidentified File Objects</I>, Lisa Lees, <I>Sys Admin</I>, July/August
1995

<P><I>A Conversation With William Kahan</I>, Jack Woehr, <I>Dr Dobb's Journal</I>,
November 1997<I></I>

<P><I>Java and Client-Server</I>, Joe Novosel, <I>Linux Journal</I>, January
1997

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, James Rogers <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./berglund.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./zawinski.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 
<H4>
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>

<P> <HR> <P> 
<!--===================================================================-->

<center>
<H2>xscreensaver</H2>
<H4>By <a href="mailto:jwz@netscape.com">Jamie Zawinski</a></H4>
</center>
<P> <HR> <P>  

I saw the article on Xlockmore by Larry Ayers in issue 18 of the Linux
Gazette, and I was surprised that it didn't mention, even in passing,
my XScreenSaver program!  
<P>
Allow me to engage in a bit of advocacy.
<P>
Back in 1991, before Xlockmore existed, there was only Xlock.  Xlock
was not a screensaver: it was only a locker.  There was no way to 
make it activate itself automatically when the console became idle,
nor was there any way to avoid having it lock the screen: that is,
there was no way to have it turn off when the mouse moved.
<P>
So, I wrote XScreenSaver.
<P>
XScreenSaver is superior to Xlockmore in a number of ways.  The most
important way, of course, is that it is actually a *screen saver*.
Although Xlockmore can be configured to not require a password, it
still doesn't have the ability to turn on when the machine is idle;
for that you have to use an external program that launches and kills
it.
<P>
The second way in which XScreenSaver is better is that it takes a 
server/client approach: the "xscreensaver" program itself knows how
to detect idleness, and to lock the screen.  The graphics hacks are
not built in: the beauty of XScreenSaver is that any program which 
can draw on the root window can be launched by XScreenSaver for use
as a graphics hack!  This has several benefits:
<P>
  *  You don't have to recompile and reinstall xscreensaver to
     install a new graphics hack: all you have to do is change your
     X resources, and issue one command.
<P>
  *  Since programs don't have to be written *specifically* to run
     inside the xscreensaver framework, there are many more potential
     graphics hacks available.  They don't even need to be written in
     the same language: they just have to draw on the root.  Thus,
     it's easier to write programs to work with XScreenSaver than with
     Xlock or Xlockmore, because they don't have to follow a complex
     set of idiosynchratic rules on how to structure the code: the
     only rule is, "draw on the root."
<P>
  *  By separating the task out into two processes, the whole system
     becomes more robust: the memory protection provided by the OS
     serves us well, in that, if one particular graphics hack has a 
     bug (leaks memory, corrupts memory, gets a floating-point
     exception, etc) the integrity of the screen saver itself is not
     compromised.  The offending hack may exit, but the screen saver
     itself is still running, and the screen is still blackened (or
     locked.)  Also, since a screen saver is, by its nature, a very-
     long-running background task, even a small leak would build up
     over time.  By arranging for the graphics hacks themselves to be
     relatively short-running tasks, this problem goes away.
<P>
  *  On some systems, only programs which are running as root can check
     passwords.  Therefore, on such systems, a screen locker would need
     to be a setuid-root program.  Obviously one needs to be very
     careful about what programs one allows out of the security sandbox;
     a conscientious sysadmin would want to examine such a program
     very carefully before installing it.  The XScreenSaver model allows
     this, by having the priveleged part of the program (the saver
     itself) be small, while letting the larger part (the graphics
     hacks) remain unpriveleged.
<P>
XScreenSaver also includes a nice Demo Mode that lets the user
interactively experiment with the currently-configured graphics hacks.
(Until recently, most Linux users wouldn't have been able to take
advantage of this, since the code had required Motif; but that is now
configurable, and demo mode works with Athena widgets too -- since
release 1.27 back in January 1997.)
<P>
If you have a system with more than one monitor, XScreenSaver can save
them both at once: a different graphics hack will run on each, and if
the two monitors have different depths (for example, if one is
monochrome and the other color) they can be configured to choose their
screenhacks from different lists, so that each monitor is running the
hacks that look best on it.
<P>
Most of the xlockmore hacks (the ones that I liked, anyway, including
the GL modes) are included with the XScreenSaver distribution; the only
change made being to extract the various display modes from the
monolithic XLock executable, and turn them into standalone
root-window-oriented programs.
<P>
However, it's possible to have XScreenSaver run xlock itself, as just
another one of its many modes -- the best of both worlds!
<P>
Do check it out: the canonical web page is <A
HREF="http://people.netscape.com/jwz/xscreensaver/">
http://people.netscape.com/jwz/xscreensaver</A>, which includes screen
shots and descriptions of most of the included graphics hacks.
<P>
The latest version, as of this writing, is 2.12.  At last count, it came
with 64 different graphics hacks.  Roughly a third of these were written
by me; the others were graciously contributed by others.
<P>
And, of course, it's all free, under the usual X-Consortium-style
copyright.
<P>
You also might enjoy my philosphical ramblings on the nature of
screensavers, at <A
HREF="http://people.netscape.com/jwz/gruntle/savers.html">
http://people.netscape.com/jwz/gruntle/savers.html</A>.

<!--===================================================================-->
<P> <hr> <P> 
<center><H5>Copyright &copy; 1998, Jamie Zawinski <BR> 
Published in Issue 24 of <i>Linux Gazette</i>, January 1998</H5></center>

<!--===================================================================-->
<P> <hr> <P> 
<A HREF="./lg_toc24.html"><IMG ALIGN=BOTTOM SRC="../gx/indexnew.gif" 
ALT="[ TABLE OF CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG ALIGN=BOTTOM SRC="../gx/homenew.gif"
ALT="[ FRONT PAGE ]"></A>
<A HREF="./rogers.html"><IMG SRC="../gx/back2.gif"
ALT=" Back "></A>
<A HREF="./lg_backpage24.html"><IMG SRC="../gx/fwd.gif" ALT=" Next "></A>
<P> <hr> <P> 

<center>
<H1><IMG SRC="../gx/backpage.gif" alt="Linux Gazette Back Page"></H1>

<H5>Copyright &copy; 1998 Specialized Systems Consultants, Inc.<br>
For information regarding copying and distribution of this material see the
<A HREF="../ssc.copying.html">Copying License</A>.</H5>
</center>

<P> <hr> <P> 

<H3>Contents:</H3>
<ul>
<li><a HREF="./lg_backpage24.html#authors">About This Month's Authors</a>
<li><a HREF="./lg_backpage24.html#notlinux">Not Linux</a>
</ul>

<a name="authors"></a>
<P> <HR> <P> 
<!--======================================================================-->

<center><H3> About This Month's Authors </H3></center>

<P> <HR> <P> 
<!--======================================================================-->

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Larry Ayers</H4>
Larry lives on a small farm
in northern Missouri, where he is currently engaged in building a
timber-frame house for his family. He operates a portable band-saw mill,
does general woodworking, plays the fiddle and searches for rare
prairie plants, as well as growing shiitake mushrooms. He is also
struggling with configuring a Usenet news server for his local ISP.

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Andr&eacute; D. Balsa</H4>
Andr&eacute; lives in France, 80 miles south of Lyon. He currently runs
a small Internet consulting business. When not busy exploring Linux
performance issues, Andrew likes to spend his time with his 1-year old
daughter, or else try different French recipes on his friends.
He also helped set up the Linux Benchmarking Project pages at
<A HREF="http://www.tux.org/bench/">http://www.tux.org/bench/</A>.
and a web site at <A HREF="http://www.tux.org/~balsa/linux/cyrix">
http://www.tux.org/~balsa/linux/cyrix</A>,
about the use of Cyrix 6x86 processors with Linux,
which has had more than 9,000 visitors in less than two months uptime.

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Gerd Bavendiek</H4>
Gerd has worked as a software engineer with various flavors of Unix since 1988.
In 
1994 he realized that using Linux could make his every-day work more
convenient.
Since that time he has used Linux and various GNU-software. He lives in Essen,
Germany. 
In my spare time I build model-steam engines using real hardware: lathe,
milling-machine and a lot of hand tools.

<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Erik Campo</H4>
Erik is a Computer Science graduate from UQAM (Universite du
Quebec A Montreal) since June 1997. He has been working as a network
programmer (C, C++, Java), teaching assistant and as a systems
administrator in the Teleinformatique laboratory of UQAM for a year and 
a half. He is now working at UQAM's Registrar's Office as a Webmaster and 
as system administrator for the Teleinformatique laboratory. Erik is a
Unix/Linux specialist, having installed and managed several flavours of 
Unix as Coherent, Minix, Linux and Solaris. He likes to write articles
about Linux, listens to Heavy Metal music, plays both spanish and electric
guitar and is a fanatic of the Spanish Civil War, history of General
Franco and the political transition period in Spain from 1975 to 1978. For
more information, please consult his web page at: http://campo.ti.ml.org/.

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Jim Dennis</H4>
Jim 
is the proprietor of <A href="http://www.starshine.org">
Starshine Technical Services</A>.
His professional experience includes work in the technical 
support, quality assurance, and information services (MIS)
departments of software companies like 
<A href="http://www.quarterdeck.com"> Quarterdeck</A>, 
<A href="http://www.symantec.com"> Symantec/
Peter Norton Group</A>, and 
<A href="http://www.mcafee.com"> McAfee Associates</A> -- as well as 
positions (field service rep) with smaller VAR's.
He's been using Linux since version 0.99p10 and is an active
participant on an ever-changing list of mailing lists and 
newsgroups.  He's just started collaborating on the 2nd Edition
for a book on Unix systems administration.
Jim is an avid science fiction fan -- and was
married at the World Science Fiction Convention in Anaheim.

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Joel Jaeggli</H4>
Joel is a programer consultant with the University of Oregon
Computing Center. Fomerly he worked for the Network Startup Resource
Center http://www.nsrc.org, helping ngos in emerging nation connect to the
internet, and of course discover the joy of free Unixes.

<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Dave Nelson</H4>
Dave is a manager who mostly deals with computing as an
abstraction. He used to do computational science research, and
Linux helps him stay in touch with reality. 

<P> 
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Mark Nielsen</H4>
Mark works at the Health Sciences Library at The Ohio State
University
as a systems specialist. One day he hopes to replace NT computers
with Linux and KDE.

<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">James M. Rogers</H4>
James and Shahla Rogers own a farm in the back woods of Ohio and have 6
dogs and 3 cats.&nbsp; He has served 14 years in the Airforce and Army,
both enlisted and officer.&nbsp; His first computer was a TS-1000.&nbsp;
He gave up his C128 in 1991 for Linux.&nbsp; He is currently a UNIX and
C contract programmer for the University of Washington.

<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Ylian Saint-Hilaire</H4>
Ylian is a Computer Science graduate from UQAM (Universite du Quebec
A Montreal) since last summer and is now completing his master's degree
at the same university specializing in Network Computing. He is a web site
publishing and Internet specialist. He has been working with Internet and 
computer applications development for the last seven years, both as part 
of his formal education and as a personal passion. From 1981 to 1984 he lived
on a sailboat in the Caribbean with his family. In 1991 he was selected
by the Montreal Chamber of Commerce as one of the "Leaders of Tomorrow".
He is also a commercial pilot. His web address is
http://kairos.dsa.uqam.ca/software/.

<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Michael E. Smith</H4>
Michael is the Acting Managing Director of LXNY - New York's
Free Computing Organization; editor of the Unigroup of New York
Newsletter (editor@unigroup.org); and enthusiastic advocate for
Unix-like systems.  He is a philosopher who has made his living as a
computer consultant, presently as a Senior Associate of Charles River
Computers, Inc., doing Unix Systems Administration at J. P. Morgan.
Career highlights include authoring and deploying an original database
system in MUMPS-15 and doing SETL research under Jacob T. Schwartz.
Smith is a man of wide interests inside and outside of the computer
field, but lately of little time to pursue them.

<P>
<H4><IMG ALIGN=BOTTOM ALT="" SRC="../gx/note.gif">Jamie Zawinski</H4>
<A HREF="http://people.netscape.com/jwz/">Jamie</A>
is a card-carrying
<A HREF="http://catalog.com/hopkins/unix-haters/login.html">Unix
Hater</A>, who doesn't use Linux, but despite that, has authored an
awful lot of software that runs on Linux, including 
<A HREF="http://www.xemacs.org/">Lucid Emacs</A>,
<A HREF="http://people.netscape.com/jwz/xscreensaver/">XScreenSaver</A>,
<A HREF="http://people.netscape.com/jwz/xdaliclock/">XDaliClock</A>,
and the initial Unix versions of 
<A HREF="http://home.netscape.com/">Netscape</A> Navigator, and the
Netscape Mail and News readers.

<a name="notlinux"></a>
<P> <hr> <P> 
<!--====================================================================-->

<center><H3> Not Linux </H3></center>

<P> <HR> <P> 
<!--======================================================================-->
<P>
Thanks to all our authors, not just the ones above, but also those who wrote
giving us their tips and tricks and making suggestions. Thanks also to our
new mirror sites.
<P> 
Margie and I had a great Christmas break in Houston, Texas, where much of
her family lives. Besides visiting with family and numerous friends we got
to tour the Cockrell butterfly habitat, which was very pretty. Mostly sunny
days and highs in the 60s made it tough to return to the middle of a
Seattle winter, but we managed.
<p>
Have fun!

<P> <hr> <P> 
<!-- A HREF="http://www.ssc.com/ssc/Employees/Margie/margie.html"> -->
Riley P. Richardson<br>
Editor, <i>Linux Gazette</i> <A HREF="mailto:gazette@ssc.com">gazette@ssc.com</a>

<P> <HR> <P>
<!--====================================================================-->
<A HREF="./lg_toc24.html"><IMG SRC="../gx/indexnew.gif" ALT="[ TABLE OF 
CONTENTS ]"></A>
<A HREF="../lg_frontpage.html"><IMG SRC="../gx/homenew.gif" ALT="[ FRONT 
PAGE ]"></A> 
<A HREF="./zawinski.html"><IMG SRC="../gx/back2.gif" ALT=" Back "></A>
<p><hr><p>
<I>Linux Gazette</I> Issue 24, January 1998, <A
HREF="http://www.linuxgazette.com/">http://www.linuxgazette.com/</A><BR> 
This page written and maintained by the Editor of <I>Linux Gazette</I>,
<A HREF="mailto: gazette@ssc.com"> gazette@ssc.com</A>
<P> 
</BODY>
</HTML>